3

我有一个保存在空白工作簿和多个数据工作簿中的 excel 宏。

我目前单独打开宏文件和每个数据文件,并使用键盘快捷键在每个文件上运行宏。

有没有办法在所有数据工作簿上运行宏而不打开它们,或者使用

  • 一个批处理文件,
  • VBA/VBScript,
  • 电源外壳,
  • 或类似的东西?
4

5 回答 5

3

一种方法是将宏添加到文件 PERSONAL.XLSB。每次启动 Excel 时,此文件都会在后台加载。最初,PERSONAL.XLSB 文件将不存在。要自动创建此文件,只需开始录制“虚拟”宏(使用电子表格左下角的录制按钮)并选择“个人宏工作簿”将其存储。录制宏后,您可以打开 VBA使用 [Alt]+[F10] 编辑器,您将看到带有“虚拟”宏的 PERSONAL.XLSB 文件。我使用这个文件来存储总是可用的通用宏的负载。我已将这些宏添加到我自己的菜单功能区中。这个通用宏文件的一个缺点是,如果您启动多个 Excel 实例,您将收到一条错误消息,即 PERSONAL. Excel 实例 Nr 已在使用 XLSB 文件。1. 这时候只要不添加新的宏就没有问题。

于 2012-05-23T08:12:13.750 回答
2

以下两种可能的解决方案,

  1. 可以直接作为 vbs 文件运行
  2. 从 Excel 中运行的解决方案(根据 Tim Williams 的建议)

解决方案

Dim objFSO
Dim objFolder
Dim objFil
Dim objXl
Dim objWb
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
Set objFSO = CreateObject("scripting.filesystemobject")
Set objFolder = objFSO.getfolder("c:\temp")
For Each objFil In objFolder.Files
    If InStr(objFil.Type, "Excel") > 0 Then
        Set Wb = objExcel.Workbooks.Open(objFil.Path)
        wscript.echo Wb.name
        Wb.Close False
    End If
Next

解决方案

Sub OpenFilesVBA()
    Dim Wb As Workbook
    Dim strFolder As String
    Dim strFil As String

    strFolder = "c:\Temp"
    strFil = Dir(strFolder & "\*.xls*")
    Do While strFil <> vbNullString
        Set Wb = Workbooks.Open(strFolder & "\" & strFil)
        Wb.Close False
        strFil = Dir
    Loop
End Sub
于 2012-05-23T07:45:33.827 回答
1

我刚刚偶然发现了你的帖子,也许很晚,但对于所有未来的搜索。可以通过创建 .vbs 文件来启动您的宏。为此,请打开记事本并添加以下内容:

objExcel = CreateObject("Excel.Application")

objExcel.Application.Run <insert macro workbook file path, module and macro name here>
objExcel.DisplayAlerts = False
objExcel.Application.Save
objExcel.Application.Quit

Set objExcel = Nothing

按如下方式保存文件(“您的文件名”.vbs)

通过双击(打开)保存的.vbs文件,它将启动您的宏,而您根本无需打开您的 Excel 文件。

希望这可以帮助。

于 2016-01-13T08:48:16.620 回答
0

另一种方式,

Sub LoopAllWorkbooksOpened()

Dim wb As Workbook

For Each wb In Application.Workbooks
    Call YourMacroWithWorkbookParam(wb)
Next wb

End Sub

Sub YourMacroWithWorkbookParam(wb As Workbook)
    MsgBox wb.FullName
End Sub
于 2012-05-22T23:07:19.727 回答
0

您可以将宏保存在您的个人.xls 或主文件中,并使用 vba 循环浏览工作簿,并在运行宏之前激活它们。据我所知,您仍然必须使用 vba 打开它们。

你可以使用这样的东西:

sub LoopFiles
  Dim sFiles(1 to 10) as string  'You could also read this from a range in a masterfile
      sFiles(1) = "Filename1.xls"
         .
         .
      sFiles(10) = "Filename10.xls"
  Dim wb as Workbook
  Dim iCount as integer
     iCount = ubound(sFiles)
  Dim iCount2 as integer

  For iCount2 = 1 to iCount
     Workbooks(sFiles(iCount2)).open
     Workbooks(sFiles(iCount2)).activate
     Call YourMacro
     Workbooks(sFiles(iCount2)).close
  next iCount2
end sub
于 2012-05-22T19:51:59.197 回答