2012-12-17 64 views
1

好的,所以我编写了一个宏,在从我编写的工作簿启动时工作正常。但是,我需要宏能够跨各种工作簿工作。VBA Excel 2003独立于特定工作簿的宏

我已将宏移至隐藏的“个人”工作簿,但是,现在当代码引用“ThisWorkBook”时,是的,它指向个人工作簿。

我曾经想过创建一个工作簿变量并指向工作簿的地址/名称......但这有所不同(工作簿由系统生成,并且工作簿的名称取决于时间/生成日期)。

作为参考,我想在Excel的工具栏上放一个按钮,当用户点击它时,它会运行这个宏。也许,有没有办法获得调用宏的工作簿的名称?

谢谢, 山姆。

+0

嗨,所以现在你有2个工作簿,其中一个隐藏着宏(让我们将其命名为A),另一个可见,让我们将其命名为B. 所以你想调用宏中的A ? – Larry

+0

嘿拉里, 就是这样。为了给你更多的背景: 我们有一个系统输出一个电子表格,里面装满了数据(A),另一个电子表格里面有一系列公式(B)。目前,用户必须通过A,复制正确的字段并将它们粘贴到B. 我已经编写了一个可以自动执行此过程的宏,因此他们现在打开A,点击快捷方式,宏定位并打开B,然后在A中找到相关数据并将其粘贴到B. –

+0

对不起仍然有点不清楚的情况和你想要什么,我们可以继续讨论http://chat.stackoverflow.com/rooms/info/21244/http-stackoverflow-com-questions-13909747-vba -excel-2003-macro-independent-from?tab = general? – Larry

回答

1

如果有工作簿A(数据工作簿),你可以做以下更改 识别工作簿中

Dim wbA As Workbook 'workbook A (the data workbook) 
Dim wb As Workbook 

For Each wb In Workbooks 'loop through all opened workbooks, matching the name 
    If InStr(wb.Name, "ABC") > 0 Then 
     Set wbA = wb 
     Exit For 
    End If 
Next wb 

然后由WBA

+0

伟大的解决方案,谢谢! –

3

有取代“的ThisWorkbook”的命名约定有效的命令,它将允许您引用代码被调用的工作簿和工作表。

ActiveCell 
ActiveChart 
ActiveEncryptionSession 
ActivePrinter 
ActiveProtectedViewWindow 
ActiveSheet 
ActiveWindow 
ActiveWorkbook 

Application对象

0

你也可以使用,而不是一个宏观VBS的所有属性。语言几乎完全相同,您的脚本将独立于您的工作簿。

至于确定使用哪个文件来运行宏(没有数据和代码的例子,它很难太具体),你可以浏览你想要的文件。

Dim objShell 
Set objShell = CreateObject("Shell.Application") 

Dim strFileName 
Dim strFilePath 

Dim dPicker 
Set dPicker = objShell.BrowseForFolder(0, "Choose a file:", &H4000) 

strFilePath = dPicker.self.Path 'will give you the file path of the file you choose, 
           'which you can then use to open/access the file with 
           'the data you need. 

'Code 

Set dPicker = Nothing 

如果您想坚持一个宏,您可以检出FileDialog对象以使用VBA中的文件选取器。

要获得VBA打开的工作簿的文件名和/或路径,使用

ActiveWorkbook.Name 
ActiveWorkbook.Path 

希望这有助于!

0

只需将“ThisWorkbook”替换为“ActiveWorkbook”即可。

相关问题