1

好的,所以我编写了一个宏,当从我编码的工作簿启动时它工作正常。但是,我需要宏能够跨各种工作簿工作。

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

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

作为参考,我想在 Excel 的工具栏上放置一个按钮,当用户单击它时,它会运行此宏。是否有一种方法可以获取调用宏的工作簿的名称?

谢谢,山姆。

4

4 回答 4

3

有一些活动命令可让您引用从中调用代码的工作簿和工作表。

ActiveCell
ActiveChart
ActiveEncryptionSession
ActivePrinter
ActiveProtectedViewWindow
ActiveSheet
ActiveWindow
ActiveWorkbook

Application对象的所有属性

于 2012-12-17T16:55:59.617 回答
1

如果工作簿 A(数据工作簿)中有命名约定,您可以执行以下更改来识别工作簿 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 替换“ThisWorkBook”

于 2012-12-17T07:53:51.360 回答
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

希望这可以帮助!

于 2012-12-18T01:37:57.993 回答
0

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

于 2013-10-13T12:10:05.293 回答