2015-05-21 202 views
0

因此,我有一个恒定的7个范围,它们都是一个单元格宽度和一个大的任意高度,它们之间的高度相同。是否可以加入范围,以便我有一个范围只包含所有7个范围?我尝试过UnionRange函数,但它返回的数字远远大于预期值。VBA加入范围

这是我到目前为止有:

' 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 
+0

阅读[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)将帮助您尽快得到答案。请记住,这不是一个代码写作服务,所以发布你有什么和我们可以帮助你解决它。 – FreeMan

+0

感谢您的建议;我发布了我的代码。但是,我问是否有可能。我从来没有告诉任何人为我写代码。即使提到内置函数或解决问题的方法也会比我所问的要多。 – Paradox

+1

当你设置rng1 = ...'做一个'rng1.select'。它看起来像你从你的范围的左侧错过你的行。 – FreeMan

回答

3

无法在不同的工作表范围内运行UNION()。 A 范围限于单张纸上的一组单元格。

编辑#1:

我怀疑你Debug.Print。您正在打印像素 - 相关变量,而不是一个行数

Sub dural() 
    Dim r As Range 
    Set r = Range("A1:C5") 
    MsgBox r.Height & vbCrLf & r.Rows.Count 
End Sub 

enter image description here

+0

我的不好,我会编辑这个问题。为简单起见,我重命名了这些表单,但它们实际上具有相同的名称。 – Paradox

+0

@Paradox查看我的**编辑#1 ** –

+0

当我这样做时,使用实际行的位置,行高就是正确的值!但是,当我使用我的rng1变量进行此操作时,我得到了不同的高度 – Paradox

1

尝试使用unionrange.rows.count和unionrange.columns.count而不是它是可能的宽度和高度,而不是用它计算的边界小区地址间的差

+0

我按照你的建议做了,列计数是完美的,但行数比预期的大几倍。 – Paradox

+0

如果您手动计算第一行号和最后一行号之间的差异,该怎么办?它是否与输出行数匹配? – KKowalczyk

+0

不,这是不同的 – Paradox

0

我解决它通过收购行数界定,像这样:

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是用户定义的函数。