【问题标题】:Script opening multiple Excel instances打开多个 Excel 实例的脚本
【发布时间】:2016-04-18 23:42:35
【问题描述】:

我在 Bartender(标签软件)模板上有一些 VBScript,它访问 Excel 电子表格并将给定 BOM 代码的数据连接到报告上的字符串中(所有数据都来自同一行)。通过我们与 Bartender 集成的应用程序修改电子表格或运行脚本会导致打开许多 Excel 实例,并极大地降低任何使用该模板的计算机的速度。

Public Function GetData()
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open  _
        ("C:\Users\Public\Formulator\Labels\BOMSuffixes.xlsx")

    intRow = 2
    strNames = ""
    genericDescription = ""
    containerWeight = ""
    containerUom = ""

    Do Until objExcel.Cells(intRow,7).Value = ""
        strNames = objExcel.Cells(intRow, 7).Value
        If InStr(Field("BOM.BOMCode"),strNames) <> 0 Then 
            genericDescription = objExcel.Cells(intRow, 8).Value
            containerWeight = objExcel.Cells(intRow, 9).Value
            containerUom = objExcel.Cells(intRow, 10).Value
        End If

        intRow = intRow + 1
    Loop

    GetData = Field("BOM.BulkQuantity") + " " + Field("BOM.BulkUnits") +
              " (" + CStr(Round(Field("BOM.BulkQuantity")*0.453592, 2) ) +
              " Kg)" +" packed in a " + CStr(containerWeight)  + " " +
              containerUom + " (" + CStr(Round(containerWeight*0.453592, 2) ) +
              " Kg)" + ", " + genericDescription

    objExcel.Close
    objExcel.Quit
    objExcel.DisplayAlerts = False
End Function

【问题讨论】:

    标签: excel vbscript


    【解决方案1】:

    如果您想避免一遍又一遍地创建和销毁 Excel 实例,您可以在脚本结束时让实例继续运行,并(尝试)在开始时重新附加到已经运行的实例。仅在失败时创建一个新实例。

    Public Function GetData()
        On Error Resume Next
        Set objExcel = GetObject(, "Excel.Application")
        If Err Then
            If Err.Number = 429 Then
                Set objExcel = CreateObject("Excel.Application")
            Else
                WScript.Echo Err.Number & ": " & Err.Description
                WScript.Quit 1
            End If
        End If
        On Error Goto 0
    
        ...
    
        objExcel.Close
        objExcel.Quit
        objExcel.DisplayAlerts = False
        Set objExcel = Nothing
    End Function

    但是请注意,使用这种方法时,您需要某种清理工作来删除孤立的 Excel 实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      相关资源
      最近更新 更多