导入Excel宏并使用VBS运行它

时间:2017-12-05 20:50:19

标签: excel excel-vba vbscript vba

我想创建一个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

谢谢!

1 个答案:

答案 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的专家,所以我希望该代码有效。如果没有,请告诉我。