Ga naar inhoud

Aanbevolen berichten

Geplaatst: (aangepast)

Ik heb volgend stuk code in een Visual Basic Script:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("D:\testfile.xlsx")
objWorkbook.Activate
 
(... andere code om paar velden te updaten, "Calculate" te doen,...)
 
objExcel.ActiveWorkbook.Save
objExcel.ActiveWorkbook.Close
Set objWorkbook = Nothing
objExcel.Application.Quit
objExcel.Quit
Set objExcel = Nothing

Echter, script blijft hange nbij het stuk waar Excel applicatie moet worden afgesloten. Wat doe ik verkeerd?

aangepast door mani88
Geplaatst:

Probeer onderstaande code.

De volgorde van de laatste twee regels lijkt vreemd, maar werkt vaak het beste.

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("D:\testfile.xlsx")
objWorkbook.Activate 
' (... andere code om paar velden te updaten, "Calculate" te doen,...) 
objExcel.ActiveWorkbook.Save
objExcel.ActiveWorkbook.Close
Application.Quit
ThisWorkbook.Saved = True
Geplaatst:

Alvast bedankt maar daarmee is het nog niet opgelost. Door toevoegen van wat commentaar ben ik nu ook te weten gekomen waar het precies vastloopt en blijkbaar blijft het script niet hangen bij het afsluiten van de Excel applicatie. Wel bij het afsluiten van een add-in die ik in het begin ook heb geopend.

 

Ik zal je hieronder de volledige code geven, dat maakt het misschien makkelijker.

 

Wat doet dit script?

Het opent een excel (meegegeven als argument bij oproepen script: Wscript.Arguments(0)) en gaat daar 2 cellen in updaten met waarden die ook bij de oproep zijn meegegeven (Wscript.Arguments(1) en Wscript.Arguments(2)). Nadien wordt de volledige Excel opnieuw berekend ("CalculateFulRebuild"), opgeslagen en afgesloten. Om de nodige berekeningen te doen, moeten echter ook 2 add-ins worden geopend/geïmporteerd. Het zijn die add-ins die blijkbaar op het einde niet kunnen worden afgesloten, waardoor script blijft hangen.

 

Script blijft hangen op volgend stuk code:

addin1.Close False

On Error Resume Next

Set fso = CreateObject ("Scripting.FileSystemObject")
Set stdout = fso.GetStandardStream (1)

stdout.WriteLine time & " - VB Script has been started"
stdout.WriteLine time & " - Open XLS: " & Wscript.Arguments(0)
Set objExcel = CreateObject("Excel.Application")

With objExcel
    .Visible = False
    .EnableEvents = False
    .UserControl = False
    .DisplayAlerts = False
    .AskToUpdateLinks = False
End With

stdout.WriteLine time & " - Open Excel template"
Set objWorkbook = objExcel.Workbooks.Open(WScript.Arguments(0))

stdout.WriteLine time & " - Activating ExcelPRM XLS addin"
Set addin1 = objExcel.Workbooks.Open("D:\Program Files\SunGard\Prophet Excel Reporting\Altsta_12\EXCELRPM.XLA")
addin1.RunAutoMacros 1

stdout.WriteLine time & " - Activating Perms XLS addin"
Set addin2 = objExcel.Workbooks.Open("D:\Program Files\SunGard\Prophet Excel Reporting\Altsta_12\Perms.xlam")
addin2.RunAutoMacros 1

stdout.WriteLine time & " - Updating report parameters"
objWorkbook.Activate
objWorkbook.WorkSheets("INPUT PAR").Cells(2,3).Value = WScript.Arguments(1)
objWorkbook.WorkSheets("INPUT PAR").Cells(3,3).Value = WScript.Arguments(2)

stdout.WriteLine time & " - Save workbook"
objExcel.ActiveWorkbook.Save

stdout.WriteLine time & " - Start recalculate formulas"
objExcel.CalculateFullRebuild
WScript.Echo time & " - End recalculate formulas"

stdout.WriteLine time & " - Save workbook"
objExcel.ActiveWorkbook.Save

stdout.WriteLine time & " - Close workbook"
objExcel.ActiveWorkbook.Close False
Set objWorkbook = Nothing

stdout.WriteLine time & " - Close addin1"
addin1.Close False
Set addin1 = Nothing

stdout.WriteLine time & " - Close addin2"
addin2.Close False
Set addin2 = Nothing

stdout.WriteLine time & " - Close Excel VBS application"
objExcel.Application.Quit
Set objExcel = Nothing

stdout.WriteLine time & " - Returncode: " & Err.Number

If (Err.Number > 0) Then 
 stdout.WriteLine "ERROR: " & Err.Description
 stdout.WriteLine "VB Script ended with ERRORS"
Else 
 stdout.WriteLine "VB Script ended SUCCESSFULLY"
End If

WScript.Quit Err.Number
Geplaatst:

Hier kan ik je niet mee verder helpen, mogelijk anderen wel.

Die code is zonder de bijbehorende bestanden niet of nauwelijks te testen en er een slag naar slaan, dat wil ik niet.

Geplaatst:

Gevonden! :)
 
Het werkt na volgende aanpassing:
 
With objExcel

   .Visible = False
   .EnableEvents = False True
   .UserControl = False
   .DisplayAlerts = False
   .AskToUpdateLinks = False
End With

Gast
Dit topic is nu gesloten voor nieuwe reacties.
×
×
  • Nieuwe aanmaken...

Belangrijke informatie

We hebben cookies geplaatst op je toestel om deze website voor jou beter te kunnen maken. Je kunt de cookie instellingen aanpassen, anders gaan we er van uit dat het goed is om verder te gaan.