2017-05-03 96 views
3

我目前有幾個工作簿打開。其中一個有時被命名爲「trade1」,有時稱爲「trade2」,或者其他任何其他名稱,但始終開始「trade」。我試圖設置一個變量,以便不管名稱是否打開,它都以「trade」開始,該工作簿現在將成爲變量。因此,在整個宏中,我可以參考該書並將其用於諸如Trade.activate之類的內容以選擇該書。這是我在那裏我得到一個運行時錯誤「9」當前代碼:下標超出範圍的錯誤:VBA-如何設置工作簿類型變量當我只知道部分工作簿名稱

Dim Trade as Workbook 

Set Trade = workbooks("trade" & "*" & ".xls") 

我知道這可以用一個函數來完成,但希望它可以做一個簡單的方法。這是可能的還是我在傻瓜差事?

+0

如果你只有一個工作簿打開,當你在你的問題的第一句話說,你可以只使用'ActiveWorkbook '而不是'Trade'(或'Set Trade = ActiveWorkbook')。只有當您打開多個工作簿時,您才需要做任何特殊的事情。 – YowE3K

+0

如果您正在運行代碼的工作簿位於其名稱可能不同的工作簿中,則可以使用'ThisWorkbook',該工作簿稍好於'ActiveWorkbook',IMO。如果'trade ...'工作簿是您打開的唯一的* other *工作簿(除了代碼運行的工作簿之外),請參閱下面的ScottCraner的答案。 –

+0

@YowE3K重讀我的問題我確實犯了一個錯誤。運行此宏時至少有一個工作簿處於打開狀態。 – jbaboon

回答

3

您可以通過打開的工作簿環,並找到正確的一個然後設置變量:

Dim Trade As Workbook 
Dim t As Workbook 

For Each t In Workbooks 
    If Left(t.Name, 5) = "trade" Then 
     Set trade = Workbooks(t.Name) 
    End If 
Next t 
+0

謝謝,這正是我所尋找的。我認爲我也可以爲其他工作簿名稱使用相同的代碼。只需更改引號中的內容併爲其他工作簿創建一個新變量(類似於Dim Trade)? – jbaboon

+0

@jbaboon是的,只是改變你在找什麼。 –

相關問題