0

我使用此代码搜索文件夹,找到所有 excel 文件(具有相同的扩展名),从打开的 excel 文件运行 VBA 脚本并在不提示的情况下保存它。

strPath = "my path"
pathName="xlsx"

if strPath = "" then Wscript.quit
if pathName = "" then Wscript.quit

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.DisplayAlerts = False

Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder (strPath)

For Each objFile In objFolder.Files

If objFso.GetExtensionName (objFile.Path) = "xlsx" Then
   Set objWorkbook = objExcel.Workbooks.Open(objFile.Path)

   Set objWorksheet = objWorkbook.WorkSheets(1)
   objworksheet.Activate

objExcel.Application.Run "'filename and in quote because there is space.xlsm'!TestingMacro"


 objWorkbook.saveas(objFile.Path)
   objWorkbook.Close True 'Save changes
End If

Next

objExcel.Quit

但是,每次我运行它时,它只会在 objExcel.Application.Run 行上给我一个运行时错误 800A03EC。那么我能做些什么来解决它呢?

谢谢!

4

3 回答 3

3

必须先打开包含宏的工作簿,然后才能从中运行宏。使用完整路径打开宏工作簿,但只使用工作簿和宏名称运行宏。

Set xl = CreateObject("Excel.Application")
xl.Visible = True

Set wbm = xl.Workbooks.Open("C:\path\to\macro workbook.xlsm")

Set fso = CreateObject("Scripting.FileSystemObject")

For Each f In fso.GetFolder("C:\some\where").Files
  If LCase(fso.GetExtensionName(f.Name)) = "xlsx" Then
    Set wb = xl.Workbooks.Open(f.Path)

    Set ws = wb.Sheets(1)
    ws.Activate

    xl.Application.Run "'macro workbook.xlsm'!TestingMacro"

    wb.Save
    wb.Close
  End If
Next

wbm.Close

xl.Quit
于 2013-06-26T21:26:04.900 回答
1

您正在尝试从您的个人工作簿运行宏,它可能无法正常工作,因为使用 VBScript 打开 Excel 文件不会自动打开您的 PERSONAL.XLSB。你需要做这样的事情:

Dim oFSO
Dim oShell, oExcel, oFile, oSheet
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("WScript.Shell")
Set oExcel = CreateObject("Excel.Application")
Set wb2 = oExcel.Workbooks.Open("C:\..\PERSONAL.XLSB") 'Specify foldername here

oExcel.DisplayAlerts = False


For Each oFile In oFSO.GetFolder("C:\Location\").Files
    If LCase(oFSO.GetExtensionName(oFile)) = "xlsx" Then
        With oExcel.Workbooks.Open(oFile, 0, True, , , , True, , , , False, , False)



            oExcel.Run wb2.Name & "!modForm"


            For Each oSheet In .Worksheets



                oSheet.SaveAs "C:\test\" & oFile.Name & "." & oSheet.Name & ".txt", 6


            Next
            .Close False, , False
        End With
    End If



Next
oExcel.Quit
oShell.Popup "Conversion complete", 10

因此,在循环开始时,它打开 personals.xlsb 并从那里为所有其他工作簿运行宏。只是想我应该在这里发帖,以防有人像我一样遇到这个问题,但无法弄清楚为什么宏仍然没有运行。

于 2013-11-20T20:40:01.113 回答
-1

您可能需要在新的 excel 实例中运行 objFolder 目录中的每个 excel 文件。

strPath = "my path"
pathName="xlsx"

if strPath = "" then Wscript.quit
if pathName = "" then Wscript.quit

Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder (strPath)

For Each objFile In objFolder.Files
    If objFso.GetExtensionName (objFile.Path) = "xlsx" Then

        Set objExcel = CreateObject("Excel.Application")
        objExcel.Visible = True
        objExcel.DisplayAlerts = False

        Set objWorkbook = objExcel.Workbooks.Open(objFile.Path)
        Set objWorksheet = objWorkbook.WorkSheets(1)
        objworksheet.Activate

        objExcel.Application.Run "'filename and in quote because there is space.xlsm'!TestingMacro"

        objWorkbook.saveas(objFile.Path)
        objWorkbook.Close True 'Save changes
        objExcel.Quit

    End If
Next
于 2013-06-26T20:47:44.417 回答