我想创建一个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
谢谢!
答案 0 :(得分: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的专家,所以我希望该代码有效。如果没有,请告诉我。