使用范圍聯合方法使用 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(name)) 中使用過范圍的聯合方法
Worksheets("Sheet1").Activate
Application.Union(rng00,rng01).Copy
uj5u.com熱心網友回復:
Union是Application物件的函式,而不是作業表物件的函式。這意味著這ws.Union將不起作用,因為沒有名稱Union為ws. 正確的父函式是Application.Union但是因為Application.為每個函式撰寫代碼會很乏味,所以大部分時間Application.都沒有撰寫。
的引數Union必須是來自同一作業表的范圍物件。在宣告范圍時,明確宣告其父表很重要,以避免以后出現類似Union. ws在Rangelike前面添加ws.Range是如何宣告該范圍是該作業表的成員。
所以完整的更正代碼將是
Set ws = ThisWorkbook.ActiveSheet
Set rng00 = ws.Range("A1:C3")
Set rng01 = ws.Range("F1:G3")
Application.Union(rng00, rng01).Copy
uj5u.com熱心網友回復:
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"),您正在創建對ActiveSheet(可能是作業表,可能是圖表),ActiveWorkbook(可能是ThisWorkbook,但可能不是)的范圍的參考。它只會在偶然情況下正常作業,以防萬一你ActiveWorkbook是ThisWorkbook和你ActiveSheet是Sheet1在ActiveWorkbook.
Application.Union method
它的“全名”說明了一切:它是
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
- Of course, if there is no worksheet named
Sheet1in the workbook, an error will occur. But that's another story.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/358517.html
