如何在不打开 Excel 的情况下 运行 宏

How to run macro without open Excel

我试图在 Excel 内对 运行 宏执行 .vbs 脚本,但没有打开工作簿。 但是当我打开工作簿时,我发现没有任何改变。

用于将列类型从文本百分比更改为数字百分比的宏。

Public Sub updateColumnFormat()

    'Disable screen update and calculation to improve the performance of import
    Application.ScreenUpdating = False
    Application.ScreenUpdating = True
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    Application.EnableCancelKey = True
    Application.Calculation = False
    Application.ScreenUpdating = False
    
    Sheets("Status").Select
    [B:B].Select 'Update data type from text to number of CreditLimit (Column B)
    With Selection
      .NumberFormat = "General"
      .Value = .Value
    End With
    Selection.Style = "Percent"
    Call Refreashstage
    'Sheets("Status").Select
    'Range("B3").Select
    'Sheets("Sales").Select
    On Error Resume Next

End Sub

Sub Refreashstage()

    Sheets("Status").Select
    Range("B3").Select
    Sheets("FY21 Sales Forecast").Select

End Sub

.vbs 脚本执行宏而不打开 Excel

Set ObjExcel = CreateObject("Excel.Application")
objExcel.Application.Run "'C:\Users\NB\Desktop\test6.xlsm'!Module1.updateColumnFormat"
objExcel.DisplayAlerts = False
objExcel.Application.Quit
Set objExcel = Nothing

运行 来自当前未打开的工作簿的脚本会自动触发工作簿打开。当您执行 objExcel.Application.Run 时,您将在您创建的隐藏 excel 应用程序中打开工作簿。如果您要在 .Run 行之后插入行 objExcel.Visible = True,您会看到打开的工作簿。

当您执行 objExcel.Application.Quit 时,您将在打开工作簿后将其关闭。 Application.DisplayAlerts = False 行禁用了弹出窗口,该弹出窗口会询问您是否要在关闭前保存对工作簿所做的更改。它默认为“否”并放弃所有更改。

在执行 objExcel.Quit 之前正确关闭工作簿:

VBA:objExcel.Workbooks(1).Close SaveChanges:=True

VBScript:objExcel.Workbooks(1).Close True

旁注:您的代码以非常不必要的方式使用 .Select.Select 只有在将用户的注意力吸引到屏幕区域或单元格时才真正有用。但是您的工作簿甚至不可见,所以 .Select 只会减慢执行速度并使对象引用不明确。

我建议您将代码改进为:

    'Update data type from text to number of CreditLimit (Column B)
    With ThisWorkbook.Sheets("Status").Columns("B")
        .NumberFormat = "General"
        .Value = .Value
        .Style = "Percent"
    End With
    Call Refreashstage