假設我打開了兩個作業簿,其中有兩個名為“Tab1”的選項卡。如果在 VBA 中,我想參考選項卡上的某些內容,人們會說“Tab1!” 其次是指的是什么,例如“Tab1!R1C1”等。
但是,在這種情況下,代碼如何知道我指的 Tab1 是什么?
如果值得一提,我正在運行的代碼在其中一個作業簿中。那么它會總是默認回到那個作業簿選項卡 1 嗎?如果不是,它有什么作用,如果是,我將如何使它參考另一個作業簿的選項卡 1?
對于背景關系,我需要在呼叫方法“ChangePivotCache”并為其提供 SourceData 的情況下執行此操作。
uj5u.com熱心網友回復:
如果沒有代碼,很難確定地說,但讓我們假設您正在使用一個range物件。當您放入"Tab1!R1C1"該范圍物件時,它會使用其父級的作業簿來做出決定。大多數(如果不是全部)采用這樣的范圍引數的方法都需要它們的某個父項是作業簿或作業表。
通常,如果您使用多個作業簿,最佳做法是在您打開它們時為其分配一個物件。然后可以使用該物件來錨定您進行的任何范圍呼叫。通過直接從它呼叫或從中創建子項。
例如:
set workbook_code_is_in = Thisworkbook
set another_workbook = Application.Workbooks.Open(...)
set active_workbook = Activeworkbook
第一行將設定workbook_code_is_in為代碼所在的作業簿。
第二行將設定another_workbook為您打開的任何內容。
第三行將設定active_workbook為當前具有焦點的任何作業簿。這是危險的并且容易出錯。用戶很可能在腳本運行時單擊不同的作業簿,并使Activeworkbook成為意外的作業簿。
uj5u.com熱心網友回復:
參考第二本作業簿
- 如果您只打開了兩個作業簿,那么您可以參考包含此代碼的作業簿,
ThisWorkbook并且可以通過使用For Each...Next回圈來比較作業簿的名稱來參考另一個作業簿。
Option Explicit
Sub ReferToSecondWorkbook()
Dim wb1 As Workbook: Set wb1 = ThisWorkbook ' workbook containing this code
If Workbooks.Count <> 2 Then
MsgBox "You need to have only two workbooks open.", vbCritical
Exit Sub
End If
Dim wb2 As Workbook
For Each wb2 In Workbooks
If StrComp(wb2.Name, wb1.Name, vbTextCompare) <> 0 Then ' different
Exit For
' Else ' it is 'wb1'
End If
Next wb2
Dim ws1 As Worksheet: Set ws1 = wb1.Worksheets("Tab1")
Dim ws2 As Worksheet: Set ws2 = wb2.Worksheets("Tab1")
Debug.Print "First: ", ws1.Name, wb1.Name
Debug.Print "Second: ", ws2.Name, wb2.Name
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/370748.html
