范围联合方法有问题
having trouble with range union method
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(or maybe Workbooks(name))
Worksheets("Sheet1").Activate
Application.Union(rng00,rng01).Copy
Union
是 Application
对象的函数,而不是 Worksheet 对象的函数。这意味着 ws.Union
将不起作用,因为没有名称为 Union
的成员作为 ws
的成员。正确的父级是 Application.Union
但是因为为每个函数写 Application.
会很乏味,所以大多数时候 Application.
没有写。
Union
的参数必须是来自同一作品sheet 的范围对象。声明范围时,明确声明其父级 sheet 很重要,以避免以后使用 Union
等函数时出现问题。在 Range
前面添加 ws
就像 ws.Range
是声明范围是 sheet.
的成员的方式
所以完整的更正代码是
Set ws = ThisWorkbook.ActiveSheet
Set rng00 = ws.Range("A1:C3")
Set rng01 = ws.Range("F1:G3")
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
合格作品sheets
在工作簿中引用 sheet 时,您想限定它们(注意 wb.
):
Dim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")
这只能是一篇作品sheet,wb
- 工作簿中名为Sheet1
的作品sheet。它不可能是错误的工作sheet,除非你错误地引用了工作簿。
当您执行 Set ws = ThisWorkbook.ActiveSheet
时,它会创建对当前活动的任何 sheet(工作sheet、图表)的引用(选中,您正在查看),但在行 Worksheets("Sheet1").Activate
中,您正在激活 ActiveWorkbook
的 Sheet1˛
,当前处于活动状态的工作簿(可能是 ThisWorkbook
,但也可能不是)。
合格范围
在作品sheet中引用范围时,您想限定它们(注意ws.
):
Dim rg1 As Range: Set rg1 = ws.Range("A1:C3")
Dim rg2 As Range: Set rg2 = ws.Range("F1:G3")
这些是 ws
- 工作sheet 中的范围。它们不会是错误的,除非你错误地引用了作品sheet.
当您执行 Set rng00 = Range("A1:C3"): Set rng01 = Range("F1:G3")
时,您正在创建对 ActiveSheet
(可能是作品sheet,可能是图表)的范围的引用, ActiveWorkbook
(可能是 ThisWorkbook
,但也可能不是)。如果你的 ActiveWorkbook
是 ThisWorkbook
而你的 ActiveSheet
是 ActiveWorkbook
中名为 Sheet1
的作品sheet .
它的 'full name' 说明了一切:它是 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
的工作sheet,就会出错。但那是另外一回事了。
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(or maybe Workbooks(name))
Worksheets("Sheet1").Activate
Application.Union(rng00,rng01).Copy
Union
是 Application
对象的函数,而不是 Worksheet 对象的函数。这意味着 ws.Union
将不起作用,因为没有名称为 Union
的成员作为 ws
的成员。正确的父级是 Application.Union
但是因为为每个函数写 Application.
会很乏味,所以大多数时候 Application.
没有写。
Union
的参数必须是来自同一作品sheet 的范围对象。声明范围时,明确声明其父级 sheet 很重要,以避免以后使用 Union
等函数时出现问题。在 Range
前面添加 ws
就像 ws.Range
是声明范围是 sheet.
所以完整的更正代码是
Set ws = ThisWorkbook.ActiveSheet
Set rng00 = ws.Range("A1:C3")
Set rng01 = ws.Range("F1:G3")
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
合格作品sheets
在工作簿中引用 sheet 时,您想限定它们(注意
wb.
):Dim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")
这只能是一篇作品sheet,
wb
- 工作簿中名为Sheet1
的作品sheet。它不可能是错误的工作sheet,除非你错误地引用了工作簿。当您执行
Set ws = ThisWorkbook.ActiveSheet
时,它会创建对当前活动的任何 sheet(工作sheet、图表)的引用(选中,您正在查看),但在行Worksheets("Sheet1").Activate
中,您正在激活ActiveWorkbook
的Sheet1˛
,当前处于活动状态的工作簿(可能是ThisWorkbook
,但也可能不是)。
合格范围
在作品sheet中引用范围时,您想限定它们(注意
ws.
):Dim rg1 As Range: Set rg1 = ws.Range("A1:C3") Dim rg2 As Range: Set rg2 = ws.Range("F1:G3")
这些是
ws
- 工作sheet 中的范围。它们不会是错误的,除非你错误地引用了作品sheet.当您执行
Set rng00 = Range("A1:C3"): Set rng01 = Range("F1:G3")
时,您正在创建对ActiveSheet
(可能是作品sheet,可能是图表)的范围的引用,ActiveWorkbook
(可能是ThisWorkbook
,但也可能不是)。如果你的ActiveWorkbook
是ThisWorkbook
而你的ActiveSheet
是ActiveWorkbook
中名为Sheet1
的作品sheet .
它的 'full name' 说明了一切:它是
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
的工作sheet,就会出错。但那是另外一回事了。