gpt4 book ai didi

excel - 如何在 VBA 中设置和使用空范围?

转载 作者:行者123 更新时间:2023-12-04 13:02:37 25 4
gpt4 key购买 nike

我想以下列方式使用空范围:
Set NewRange = Union(EmptyRange, SomeRange)
我试过设置EmptyRange使用 Nothing 作为空范围, EmptyNull但是出现“运行时错误'5'无效的过程调用或参数”,看来我必须使用If声明还是有其他关键字可以完成这项工作?

我可以用 :

If EmptyRange Is Nothing Then
Set NewRange = SomeRange
Else
Set NewRange = Union(EmptyRange, SomeRange)
End If

而不是 build :
Set NewRange = Union(EmptyRange, SomeRange)

最佳答案

我用这个函数代替Application.Union当我需要合并几个 range对象,其中“零个或多个”范围可能是 Nothing :

Function union(ParamArray rgs() As Variant) As Range
Dim i As Long
For i = 0 To UBound(rgs())
If Not rgs(i) Is Nothing Then
If union Is Nothing Then Set union = rgs(i) Else Set union = Application.union(union, rgs(i))
End If
Next i
End Function
示例用法:
Sub demo_union()
Dim rg1 As Range, rg2 As Range, rg3 As Range, newRg As Range
Set rg1 = Range("A1")
Set rg3 = Range("C3")
Set newRg = union(rg1, rg2, rg3)
newRg.Select
End Sub

以下是 的变体不复制重叠单元格在返回的范围内。
通常在将重叠范围(例如 A1:B2B2:C3 )与 Application.Union 组合时(或上面的函数),结果将有多个重叠单元格的副本。
例如使用,
overlapping ranges A1:B2 and B2:C3
Application.Union([A1:B2], [B2:C3]).Cells.Count '8 cells (repeats B2)
↑ ...返回 8 单元格: A1 B1 A2 B2 B2 C2 B3 C3(而 For Each 循环将有 8 次迭代。)
功能 union2 (下)通过仅返回唯一单元格来解决此问题,并且还处理空范围(不会产生令人讨厌的模糊 "Invalid Procedure call or argument" )
Debug.Print union2([A1:B2], [B2:C3]).Cells.Count '7 cells
↑ ...返回 7 单元格: A1 B1 A2 B2 C2 B3 C3( For Each 循环将有 7 次迭代。)

关于excel - 如何在 VBA 中设置和使用空范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27554867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com