VBA 加入范围
VBA Join Ranges
所以我有一个恒定的 7 个范围,它们都是一个单元格宽度和一个大的任意高度,它们之间是相同的。是否可以加入范围,以便我有一个范围只包含所有 7 个范围?我试过 UnionRange 函数,但它 returns 的数字比预期的要大得多。
这是我目前拥有的:
' acquire the range of each column, using its coumn number and the user-defined Col_Letter function
Dim rng1 As Range
Set rng1 = Sheets("sheet_name").Range(Col_Letter(col_1) & ":" & Col_Letter(col_1) & LRow)
Dim rng2 As Range
Set rng2 = Sheets("sheet_name").Range(Col_Letter(col_2) & ":" & Col_Letter(col_2) & LRow)
Dim rng3 As Range
Set rng3 = Sheets("sheet_name").Range(Col_Letter(col_3) & ":" & Col_Letter(col_3) & LRow)
Dim rng4 As Range
Set rng4 = Sheets("sheet_name").Range(Col_Letter(col_4) & ":" & Col_Letter(col_4) & LRow)
Dim rng5 As Range
Set rng5 = Sheets("sheet_name").Range(Col_Letter(col_5) & ":" & Col_Letter(col_5) & LRow)
Dim rng6 As Range
Set rng6 = Sheets("sheet_name").Range(Col_Letter(col_6) & ":" & Col_Letter(col_6) & LRow)
Dim rng7 As Range
Set rng7 = Sheets("sheet_name").Range(Col_Letter(col_7) & ":" & Col_Letter(col_7) & LRow)
' Join the ranges of each column into one range
Dim UnionRange As Range
Set UnionRange = Union(rng1, rng2, rng3, rng4, rng5, rng6, rng7)
Debug.Print "Width of UnionRange: " & UnionRange.width
Debug.Print "Height of UnionRange: " & UnionRange.height
尝试使用 unionrange.rows.count 和 unionrange.columns.count 代替,宽度和高度可能使用边界单元格地址之间的差异而不是计算它
您不能 运行 UNION() 来自不同工作sheet 的范围。 范围 仅限于单个 sheet.
上的一组单元格
编辑#1:
我怀疑你的Debug.Print。您打印的是 pixel 相关变量,而不是 row count
Sub dural()
Dim r As Range
Set r = Range("A1:C5")
MsgBox r.Height & vbCrLf & r.Rows.Count
End Sub
我通过获取行号边界解决了这个问题:
Dim FirstRow As Long, LastRow As Long
With Get_Workbook.Sheets("Sheet_Name").UsedRange
FirstRow = .Row
LastRow = .Rows(UBound(.Value)).Row
End With
从那里,我将我的代码修改为这种格式:
Dim rng1 As Range
Set rng1 = Get_Workbook.Sheets("Sheet_Name").Range(Col_Letter(col_1) & FirstRow & ":" & Col_Letter(col_1) & LastRow)
这样,我已经用我的 Col_Letter 函数找到了正确的列字母,我也可以获得正确的使用范围。
请注意 Get_Workbook 和 Col_Letter 是用户定义的函数。
所以我有一个恒定的 7 个范围,它们都是一个单元格宽度和一个大的任意高度,它们之间是相同的。是否可以加入范围,以便我有一个范围只包含所有 7 个范围?我试过 UnionRange 函数,但它 returns 的数字比预期的要大得多。
这是我目前拥有的:
' acquire the range of each column, using its coumn number and the user-defined Col_Letter function
Dim rng1 As Range
Set rng1 = Sheets("sheet_name").Range(Col_Letter(col_1) & ":" & Col_Letter(col_1) & LRow)
Dim rng2 As Range
Set rng2 = Sheets("sheet_name").Range(Col_Letter(col_2) & ":" & Col_Letter(col_2) & LRow)
Dim rng3 As Range
Set rng3 = Sheets("sheet_name").Range(Col_Letter(col_3) & ":" & Col_Letter(col_3) & LRow)
Dim rng4 As Range
Set rng4 = Sheets("sheet_name").Range(Col_Letter(col_4) & ":" & Col_Letter(col_4) & LRow)
Dim rng5 As Range
Set rng5 = Sheets("sheet_name").Range(Col_Letter(col_5) & ":" & Col_Letter(col_5) & LRow)
Dim rng6 As Range
Set rng6 = Sheets("sheet_name").Range(Col_Letter(col_6) & ":" & Col_Letter(col_6) & LRow)
Dim rng7 As Range
Set rng7 = Sheets("sheet_name").Range(Col_Letter(col_7) & ":" & Col_Letter(col_7) & LRow)
' Join the ranges of each column into one range
Dim UnionRange As Range
Set UnionRange = Union(rng1, rng2, rng3, rng4, rng5, rng6, rng7)
Debug.Print "Width of UnionRange: " & UnionRange.width
Debug.Print "Height of UnionRange: " & UnionRange.height
尝试使用 unionrange.rows.count 和 unionrange.columns.count 代替,宽度和高度可能使用边界单元格地址之间的差异而不是计算它
您不能 运行 UNION() 来自不同工作sheet 的范围。 范围 仅限于单个 sheet.
上的一组单元格编辑#1:
我怀疑你的Debug.Print。您打印的是 pixel 相关变量,而不是 row count
Sub dural()
Dim r As Range
Set r = Range("A1:C5")
MsgBox r.Height & vbCrLf & r.Rows.Count
End Sub
我通过获取行号边界解决了这个问题:
Dim FirstRow As Long, LastRow As Long
With Get_Workbook.Sheets("Sheet_Name").UsedRange
FirstRow = .Row
LastRow = .Rows(UBound(.Value)).Row
End With
从那里,我将我的代码修改为这种格式:
Dim rng1 As Range
Set rng1 = Get_Workbook.Sheets("Sheet_Name").Range(Col_Letter(col_1) & FirstRow & ":" & Col_Letter(col_1) & LastRow)
这样,我已经用我的 Col_Letter 函数找到了正确的列字母,我也可以获得正确的使用范围。
请注意 Get_Workbook 和 Col_Letter 是用户定义的函数。