【问题标题】:Excel macro loop using VBS使用 VBS 的 Excel 宏循环
【发布时间】:2017-05-05 03:15:59
【问题描述】:

我想运行一个名为 MyMacro 的 VBA 宏,对于许多 excel 文件,它保存为 MyMacro.bas。我有下面的 VBS 代码,但它没有做我想要的。如果有人可以看一下,我将不胜感激。

我使用的是 Excel 2013。文件保存为.xls

谢谢。

Const sRootFolder = "C:\Documents"
Const sExportedModule = "C:\Documents\MyMacro.bas"
Const sMacroName = "MyMacro"

Dim oFSO, oFDR, oFile ' File and Folder variables
Dim oExcel, oWB ' Excel variables (Application and Workbook)

Start
'------------------------------
Sub Start()
    Initialize
    ProcessFilesInFolder sRootFolder
    Finish
End Sub
'------------------------------
Sub ProcessFilesInFolder(sFolder)
    ' Process the files in this folder
    For Each oFile In oFSO.GetFolder(sFolder).Files
        If IsExcelFile(oFile) Then ProcessExcelFile oFile.Path
    Next
End Sub
'------------------------------
Sub Initialize()
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oExcel = CreateObject("Excel.Application")
End Sub
'------------------------------
Sub Finish()
    oExcel.Quit
    Set oExcel = Nothing
    Set oFSO = Nothing
End Sub
'------------------------------
Function IsExcelFile(oFile)
    IsExcelFile = (InStr(1, oFSO.GetExtensionName(oFile), "xls", vbTextCompare) > 0) And (Left(oFile.Name, 1) <> "~")
End Function
'------------------------------
Sub ProcessExcelFile(sFileName)
    On Error Resume Next
    wscript.echo "Processing file: " & sFileName ' Comment this unless using cscript in command prompt
    Set oWB = oExcel.Workbooks.Open(sFileName)
    oWB.VBProject.VBComponents.Import sExportedModule
    oExcel.Run sMacroName
    oWB.Save
    oWB.Close
    Set oWB = Nothing
End Sub
'------------------------------

这是一个适用于单个文件的 vbs 代码:

Option Explicit

ExcelMacroExample
Sub ExcelMacroExample() 
  Dim xlApp 
  Dim xlBook 
  Dim objWorkbook  

  Set xlApp = CreateObject("Excel.Application") 
  Set xlBook = xlApp.Workbooks.Open("C:\Documents\test.xls", 0, True) 
  Set objWorkbook = xlApp.Workbooks.Open("C:\Documents\test.xls")  

  xlApp.Run "MyMacro"
  xlApp.Quit 

  Set xlBook = Nothing 
  Set xlApp = Nothing 
End Sub

【问题讨论】:

  • 您能告诉我们它正在做什么以及您期望它做什么吗?
  • 尝试在宏的开头加上一些MsgBox 12345,看看它是否被调用。
  • 奇怪,没有这个附加行就不会出现这个弹出窗口??
  • 您是否尝试将Const sMacroName = "MyMacro" 更改为Const sMacroName = "MyMacro.MyMacro"? (今天早上我发生了一件事情,我的子模块和模块都具有相同的名称,并且很混乱。)
  • 哦 - 我刚刚尝试过,这解决了我的测试问题。 :(

标签: excel vbscript vba


【解决方案1】:

我终于搞定了:

Const sRootFolder = "C:\Documents"
Const sExportedModule = "C:\Documents\MyMacro.bas"
Const sMacroName = "Trip"

Dim oFSO, oFile ' File and Folder variables
Dim xlApp, xlBook, objWorkbook 

Start

Sub Start()
    Initialize
    ProcessFilesInFolder sRootFolder
    Finish
End Sub

Sub ProcessFilesInFolder(sFolder)
    ' Process the files in this folder
    For Each oFile In oFSO.GetFolder(sFolder).Files
        If IsExcelFile(oFile) Then ProcessExcelFile oFile.Path
    Next
End Sub

Sub Initialize()
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set xlApp = CreateObject("Excel.Application")   
End Sub

Sub Finish()
    xlApp.Quit
    Set xlBook = Nothing 
    Set xlApp = Nothing    
    Set oFSO = Nothing
End Sub

Function IsExcelFile(oFile)
    IsExcelFile = (InStr(1, oFSO.GetExtensionName(oFile), "xls", vbTextCompare) > 0) And (Left(oFile.Name, 1) <> "~")
End Function

Sub ProcessExcelFile(sFileName)
    wscript.echo "Processing file: " & sFileName ' Comment this unless using cscript in command prompt    
    Set xlBook = xlApp.Workbooks.Open(sFileName, 0, True) 
    Set objWorkbook = xlApp.Workbooks.Open(sFileName)     
    objWorkbook.VBProject.VBComponents.Import sExportedModule
    xlApp.Run sMacroName
End Sub

另外,确保Trust access to the VBA project object model 已启用。我当然可能错了,但这里的游戏规则改变者似乎是这块:

Set objWorkbook = xlApp.Workbooks.Open(sFileName)

【讨论】:

  • 如果您指定出了什么问题以及如何纠正它,这对网站的用户会更有用。如果代码没有变化,只是Trust Access的问题,不需要重新发布代码吗?
  • 我很乐意这样做。我仍在试图弄清楚自己出了什么问题:) 在 Sub ProcessExcelFile(sFileName) 中,我尝试对单个文件执行与工作示例中相同的操作,然后它就起作用了。如果我有任何有意义的补充,def 会回来。
  • 我在修改后才开始收到Programmatic access to VB Project is not trusted 消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多