导入 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”?我不在乎它是否保存。 @Garrettwb1.Close False
应该阻止它询问您是否要保存它。以上是关于导入 Excel 宏并用 VBS 运行的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Java 中的参数运行 VBS 函数并将结果分配给变量