好的,所以我编写了一个宏,从我编写的工作簿中启动时工作正常。但是,我需要宏能够在各种工作簿中工作。
我已将宏移动到隐藏的“个人”工作簿,但是,现在当代码引用“ThisWorkBook”时,是的,它指的是个人工作簿。
我曾想过只创建一个工作簿变量并指向工作簿的地址/名称......但这会有所不同(工作簿是由系统生成的,工作簿的名称取决于时间/日期生成)。
作为参考,我想在Excel的工具栏上放一个按钮,当用户点击它时,它会运行这个宏。或许有一种方法可以获得调用宏的工作簿的名称吗?
谢谢, 萨姆。
答案 0 :(得分:3)
有 Active 命令,可以让您引用调用代码的工作簿和工作表。
ActiveCell
ActiveChart
ActiveEncryptionSession
ActivePrinter
ActiveProtectedViewWindow
ActiveSheet
ActiveWindow
ActiveWorkbook
Application
对象的所有属性
答案 1 :(得分: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”答案 2 :(得分: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
希望这有帮助!
答案 3 :(得分:0)
只需将“ThisWorkbook”替换为“ActiveWorkbook”。