2016-04-18 7 views
0

Excelスプレッドシートにアクセスし、特定のBOMコードのデータをレポート上の文字列に連結するBartender(ラベリングソフトウェア)テンプレートにいくつかのVBScriptがあります(すべてのデータが同じ行から引き出されます) 。 Bartenderと統合されたアプリケーションを使用してスプレッドシートを変更するか、スクリプトを実行すると、多くのExcelインスタンスが開き、テンプレートを使用しているすべてのコンピュータが大幅に遅くなります。複数の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 

答えて

0

あなたが終わって、あなたの上に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のインスタンス(複数可)を削除します。

関連する問題