设置Excel VBA中活动工作簿的值。

8
我现在的工作簿设置方式是这样的,在其中工作簿被硬编码到Set命令中,我想知道是否有一种方法可以让它变得更加灵活?所以无论这段代码放在哪里(在另一个工作簿中),代码都能适应其新环境。
这样说您明白吗?
下面是我现在正在使用的内容,我希望它能够使用ActiveWorkbook或类似的东西。因为这将在代码开头而不是中间设置。 Set wbOOR = Application.Workbooks("Open Order Report.xlsm")
3个回答

26

你可能想要的是 Set wbOOR = ThisWorkbook

只是为了澄清一下

ThisWorkbook 总是指代码所在的工作簿

ActiveWorkbook 指的是当前活动的工作簿

在处理多个工作簿时要小心使用,最佳选择取决于你想要实现什么目标。


1
+1 因为原帖有点含糊不清,因此解释差异以及何时何地最合适可能更好。 - Scott Holtzman
1
我个人从不使用 ActiveWorkbook,除非是为了捕获用户GUI事件,即使在这种情况下也尽量避免使用。 - user857521
3
我同意这个说法。我倾向于将我需要使用的所有工作簿设为变量,例如 Set wkbMain = ThisWorkbook or Workbooks("Main") Set wkbProcess = Workbooks("Process") 。然后根据需要引用它们。我发现这是最安全的方法,因为 ActiveWorkbook 有时会出现问题,并且可能在最不希望的时候干扰代码。 - Scott Holtzman
3
同时使用ActiveWorkbook和ActiveSheet意味着您在某个地方使用了Activate或Select,这可能也是有问题的 :) - user857521

3

这就是你所需要的全部

Set wbOOR = ActiveWorkbook

就这样?你知道在深入使用Excel VBA后,有许多方法可以完成任务,有时我似乎会忘记最简单的方法。谢谢! - Matt Ridge
重新阅读您的问题,我不确定您需要的是ActiveWorkbook还是Thisworkbook。 - Tim Williams

0

试试这个。

Dim Workbk as workbook
Set Workbk = thisworkbook

现在,您编写的所有程序都将仅适用于包含宏的工作簿。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接