excel - 范围联合方法有问题
问题描述
使用范围联合方法在使用 vba 时遇到问题。我已经解决了,最后。但是找不到合适的解释,为什么会这样?
Set ws = ThisWorkbook.ActiveSheet
Set rng00 = Range("A1:C3")
Set rng01 = Range("F1:G3")
ws.Union(rng00,rng01).Copy 'the error giving line
当我奇怪地用下面的一条线改变了它已经开始工作了。但我记得我之前使用过范围的联合方法与 ThisWorkbook(或者可能是 Workbooks(名称))
Worksheets("Sheet1").Activate
Application.Union(rng00,rng01).Copy
解决方案
Application.Union
壮举。限定对象引用
您的第一个代码
Set ws = ThisWorkbook.ActiveSheet
Set rng00 = Range("A1:C3")
Set rng01 = Range("F1:G3")
ws.Union(rng00,rng01).Copy 'the error giving line
你的第二个代码
Worksheets("Sheet1").Activate
Application.Union(rng00,rng01).Copy
Application.ThisWorkbook property
ThisWorkbook
是(参考)包含此代码的工作簿。这是一本精确的工作簿,而且只能有一本。Dim wb As Workbook: Set wb = ThisWorkbook
合格工作表
在工作簿中引用工作表时,您希望对它们进行限定(注意
wb.
):Dim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")
这只能是一个工作表,即
Sheet1
在wb
- 工作簿中命名的工作表。除非您错误地引用了工作簿,否则它不可能是错误的工作表。当您这样做时
Set ws = ThisWorkbook.ActiveSheet
,它会创建对当前处于活动状态(已选择,您正在查看)的任何工作表(工作表、图表)的引用,但在Worksheets("Sheet1").Activate
您正在激活Sheet1˛
的行中ActiveWorkbook
,当前处于活动状态的工作簿(可能是ThisWorkbook
,但可能不会)。
合格范围
引用工作表中的范围时,您希望对它们进行限定(注意
ws.
):Dim rg1 As Range: Set rg1 = ws.Range("A1:C3") Dim rg2 As Range: Set rg2 = ws.Range("F1:G3")
这些是
ws
- 工作表中的范围。除非您错误地引用了工作表,否则它们不会是错误的。当您这样做时,您正在创建对(可能是工作表,可能是图表)、(可能是,但可能不是)
Set rng00 = Range("A1:C3"): Set rng01 = Range("F1:G3")
范围的引用。只有在您的was和 your was以.ActiveSheet
ActiveWorkbook
ThisWorkbook
ActiveWorkbook
ThisWorkbook
ActiveSheet
Sheet1
ActiveWorkbook
它的“全名”说明了一切:它是
Application
对象的成员,而不是Worksheet
对象。Application.
您可以从某些Application
对象成员中省略部分:Union
是这样的成员。Union(rng1, rng2).Copy
全部一起
Option Explicit
Sub CopyRange()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")
Dim rg1 As Range: Set rg1 = ws.Range("A1:C3")
Dim rg2 As Range: Set rg2 = ws.Range("F1:G3")
Union(rng1, rng2).Copy
End Sub
- 当然,如果工作
Sheet1
簿中没有命名的工作表,就会出现错误。但那是另一回事了。