导入 Excel 宏并用 VBS 运行

Posted

技术标签:

【中文标题】导入 Excel 宏并用 VBS 运行【英文标题】:Import Excel Macro and run it with VBS 【发布时间】:2017-12-05 20:50:18 【问题描述】:

我想创建一个 vbs 脚本,该脚本将打开一个 .xlsx 文档,导入一个宏并运行该宏。对于我的使用,.xlsx 文档的名称会有所不同 - 所以我可能需要一个通配符作为文件名。这是我目前所拥有的:

Set xl = CreateObject("Excel.application")
xl.Application.Workbooks.Open "\\path\Missed_Scans\Report\Report.xlsx"
xl.Application.Visible = True
x1.VBProject.VBComponents.Import "\\path\Missed_Scans\Missed_Scans.bas"
x1.Save
xl.Application.run "'Report.xlsx'!Missed_Scans"
Set xl = Nothing

上述脚本将打开“report.xlsx”,但似乎无法正确导入或运行宏。只要宏被导入并运行,report.xlsx 就不必打开(可见或其他方式)。

编辑

这是宏:

Attribute VB_Name = "Module1"
Sub Missed_Scans()
Attribute Missed_Scans.VB_ProcData.VB_Invoke_Func = " \n14"
'
' Missed_Scans Macro
'

'
    Sheets("Incomplete_ASINs").Select
    ActiveSheet.Range("$A$1:$J$52951").AutoFilter Field:=1, Criteria1:="SDF8"
    Columns("B:D").Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Rows("1:1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveWorkbook.SaveAs Filename:="\\path\Missed_Scans\Report\Missed_Scans.xlsx" _
        , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWindow.Close
End Sub

谢谢!

【问题讨论】:

Save(作为未启用宏的工作簿)是否会导致宏被删除?为什么需要将宏放入工作簿 - 为什么不在 VBS 代码中执行等效操作? @YowE3K 我是 VBS 菜鸟。我不需要工作簿中的宏。我想要完成的是对特定列进行排序,然后将几列复制到新文档中(这是通过宏完成的)。我很高兴从 VBS 完成所有这些工作,但缺乏将宏转换为 VBS 的专业知识。我会将宏代码添加到我的初始帖子中。 【参考方案1】:

由于使用了尚未设置的x1,您的代码很可能会出现问题。

你可能打算使用

Set x1 = xl.Application.Workbooks.Open("\\path\Missed_Scans\Report\Report.xlsx")

但我希望它实际上会崩溃,而不是仅仅没有正确导入宏。


我怀疑如果你只使用 VBS 中的等效代码,你可以避免使用 VBA 宏:

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

Dim wb1
Set wb1 = xl.Application.Workbooks.Open("\\path\Missed_Scans\Report\Report.xlsx")
Dim wb2
Set wb2 = xl.Workbooks.Add

wb1.Sheets("Incomplete_ASINs").Range("$A$1:$J$52951").AutoFilter 1, "SDF8"
wb1.Sheets("Incomplete_ASINs").Columns("B:D").Copy
wb2.Worksheets(1).Paste
wb2.Worksheets(1).Rows(1).AutoFilter
wb2.SaveAs "\\path\Missed_Scans\Report\Missed_Scans.xlsx", 51, , , , False
wb2.Close
wb1.close
xl.Quit
Set xl = Nothing

注意:我不是 VBS 方面的专家,所以我希望该代码有效。如果没有,请告诉我。

【讨论】:

完美!谢谢。奖励积分:如何在最后使提示静音以保存“report.xlsx”?我不在乎它是否保存。 @Garrett wb1.Close False 应该阻止它询问您是否要保存它。

以上是关于导入 Excel 宏并用 VBS 运行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 中的参数运行 VBS 函数并将结果分配给变量

如何将多个变量从 VBS 传递到批处理脚本?

vbs操作excel宏求帮助!

VBS 在一台服务器上运行 .xlsm 工作簿中的 VBA 宏,但在另一台服务器上运行良好

VBS如何提取指定进程的PID?

VBS将本地的Excel数据导入到SQL Server中