范围联合方法有问题

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

UnionApplication 对象的函数,而不是 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 中,您正在激活 ActiveWorkbookSheet1˛,当前处于活动状态的工作簿(可能是 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,但也可能不是)。如果你的 ActiveWorkbookThisWorkbook 而你的 ActiveSheetActiveWorkbook 中名为 Sheet1 的作品sheet .

Application.Union method

  • 它的 '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,就会出错。但那是另外一回事了。