2017-05-03 188 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是的,只是改变你在找什么。 –

相关问题