Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在多个文件上运行excel宏_Excel_Powershell_Vbscript_Vba - Fatal编程技术网

在多个文件上运行excel宏

在多个文件上运行excel宏,excel,powershell,vbscript,vba,Excel,Powershell,Vbscript,Vba,我有一个excel宏保存在一个空白工作簿和多个数据工作簿中 目前,我分别打开宏文件和每个数据文件,使用键盘快捷键在每个文件上运行宏 有没有一种方法可以在所有数据工作簿上运行宏而不打开它们,或者 批处理文件 VBA/VBScript powershell 还是类似的 您可以将宏保存在personal.xls或主文件中,使用vba循环浏览工作簿,并在运行宏之前激活它们。据我所知,您仍然必须使用vba打开它们 您可以使用以下内容: sub LoopFiles Dim sFiles(1 to 10

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

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

有没有一种方法可以在所有数据工作簿上运行宏而不打开它们,或者

  • 批处理文件
  • VBA/VBScript
  • powershell
  • 还是类似的

您可以将宏保存在personal.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
换句话说

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

下面是两种可能的解决方案

  • 可以直接作为vbs文件运行
  • 从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
    
    Sub-OpenFilesVBA()
    将Wb设置为工作簿
    作为字符串的Dim strFolder
    作为字符串的Dim strFil
    strFolder=“c:\Temp”
    strFil=Dir(strFolder&“\*.xls*”)
    当strFil vbNullString时执行
    设置Wb=Workbooks.Open(strFolder&“\”&strFil)
    Wb.关闭错误
    strFil=Dir
    环
    端接头
    
    一种方法是将宏添加到PERSONAL.XLSB文件中。每次启动Excel时,都会在后台加载此文件。最初,PERSONAL.XLSB文件将不存在。 要自动创建此文件,只需开始录制“虚拟”宏(电子表格左下角的“录制”按钮),然后选择“个人宏工作簿”将其存储。录制宏后,可以使用[Alt]+[F10]打开VBA编辑器,您将看到带有“虚拟”宏的PERSONAL.XLSB文件。 我使用这个文件来存储总是可用的常规宏的加载。我已将这些宏添加到我自己的菜单功能区中。
    此常用宏文件的一个缺点是,如果启动多个Excel实例,您将收到一条错误消息,说明PERSONAL.XLSB文件已被Excel实例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
    
    objExcel=CreateObject(“Excel.Application”)
    objExcel.Application.Run
    objExcel.DisplayAlerts=False
    objExcel.Application.Save
    objExcel.Application.Quit
    设置objExcel=Nothing
    
    按如下方式保存文件(“您的文件名”.vbs)

    双击(打开)保存的
    .vbs
    文件,它将启动宏,而无需打开excel文件


    希望这有帮助。

    您可以将所有数据文件放入一个文件夹,然后使用Dir()循环它们,打开每个文件并运行宏。谢谢大家,我使用的解决方案是结合使用PERSONAL.XLSB文件(在提到它之前我对它一无所知)并且找到了powershell脚本教程。可能与i.robert重复,如果我有两台或更多的PC,且服务器中有excel,我如何才能做到这一点?当每个用户创建自己的此单个excel可执行文件实例时,您将得到“PERSONAL.xlsb已锁定以进行编辑”。理想情况下,Microsoft不应该将此文件放在programs目录中,而是放在users目录中。不确定是否可以将Excel配置为从用户目录读取personal.xlsb文件?