• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Volledig afsluiten van Excel wil niet lukken

Status
Niet open voor verdere reacties.

linkav

Gebruiker
Lid geworden
13 jun 2007
Berichten
465
Goede morgen

Ik heb een excel-bestand en bij het openen wordt een subroutine opgeroepen en uitgevoerd en na het uitvoeren van de subroutine wordt andere code aangeroepen om het excel bestand, maar ook excel volledig af te sluiten.
Deze code gebruik ik:
Application.DisplayAlerts = False

With ThisWorkbook
.Saved = False
.Close
End With
Application.Quit

Het excel-bestand wordt afgesloten maar excel zelf niet. Wat doe ik fout?

Graag jullie hulp.
 
Simpel, na Thisworkbook.Close wordt geen code meer uitgevoerd (je hebt immers het bestand gesloten). Deze 2 regeltjes sluiten je bestand ZONDER op te slaan.

Code:
ThisWorkbook.Saved = True
Application.Quit

Wil je wel opslaan, gebruik dan:

Code:
ThisWorkbook.Save
Application.Quit
 
Beste,

heb er 2 regeltjes van gemaakt (zonder save) en toch blijft excel open (mijn bestand is wel afgesloten).
 
Ariana, Even een vraag uit interesse... Wordt dit workbook straks óók door anderen gebruikt? Zo ja? Dan NOOIT als ontwikkelaar forceren dat de hele applicatie wordt afgesloten. Dit is zéér ongewenst gedrag van een programma... ;)
 
Beste Ginger,

Deze excel-file wordt niet echt gebruikt door gebruikers. Deze wordt aangeroepen vanuit een vbs-script dat iedere nacht opgestart wordt. Het excel-bestand gaat picking gegevens uit een tabel halen en een bon afdrukken afhankelijk van de status van de bon.

Nadat alle records doorlopen zijn mag de excel-file + excel volledig afgesloten worden.
 
Waar staat deze code exact en hoe ziet de resterende code van die routine eruit?
 
Private Sub Workbook_Open()
On Error GoTo err_Workbook_Open

'Controleer de regels en maak een afdruk
SubCheckOrders

'Sluit alles af
SubCloseWb

On Error GoTo 0
Exit Sub
err_Workbook_Open:
Resume Next
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Controleer de regels en maak een afdruk
Sub SubCheckOrders()
On Error GoTo err_CheckOrders
sConnString = "Provider=SQLOLEDB;Data Source=CompXDCSQL01;" & _
"Initial Catalog=CompXCommon;" & _
"Integrated Security=SSPI;"


' Create the Connection and Recordset objects.
Set Conn = New ADODB.Connection
Set Rs1 = New ADODB.Recordset

' Open the connection and execute.
Conn.Open sConnString

'Open recordset
strQuery1 = "SELECT * FROM Orders Where OrdStat = 1 order by OrderId"
Set Rs1 = Conn.Execute(strQuery1)

' Check we have data.
If Rs1.EOF Then
' Close the recordset
MsgBox "Error: No records returned.", vbCritical
Exit Sub
End If

While Not Rs1.EOF
'Doorloop recorset
blnPrintBon = False

If Rs1!OrderActive = True Then
Rs1_OrderId = Rs1!OrderId

'Hierna komen een aantal controles waaraan het order moet voldoen
If ....... then
blnPrintBon = True
End if

If blnPrintBon = True Then
blnstatus = fnctPrintBon(Rs1_OrderId)

If blnstatus = True Then
Call SubUpdate_Status(Rs1_OrderId)

strQuery1 = "SELECT * FROM Orders Where OrdStat = 1 and OrderId >= " & Rs1_OrderId & " order by OrderId"
Set Rs1 = Conn.Execute(strQuery1)
End If
End If
Read_Next_Record:
Rs1.MoveNext
Wend

' MsgBox "Klaar"
'
' Clean up
Rs1.Close
If CBool(Conn.State And adStateOpen) Then Conn.Close
Set Conn = Nothing
Set Rs1 = Nothing

On Error GoTo 0
Exit Sub

err_CheckOrders:
fnctSendError 0, "Error in " & Me.Name & "- CheckOrders: (" & Err.Number & ") - " & Err.Description
' MsgBox "CheckOrders: (" & Err.Number & ") - " & Err.Description
Resume Next
End Sub
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub SubCloseWb()
Application.DisplayAlerts = False

With ThisWorkbook
.Saved = False
.Close
End With
End Sub
 
Als je sind 2007 lid ben, moet je toch wel weten hoe je de code tussen de tags moet zetten lijk mij.
 
Code:
Private Sub Workbook_Open()
On Error GoTo err_Workbook_Open

'Controleer de regels en maak een afdruk
SubCheckOrders

'Sluit alles af
SubCloseWb

On Error GoTo 0
Exit Sub
err_Workbook_Open:
Resume Next
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''
'Controleer de regels en maak een afdruk 
Sub SubCheckOrders()
On Error GoTo err_CheckOrders
sConnString = "Provider=SQLOLEDB;Data Source=CompXDCSQL01;" & _
"Initial Catalog=CompXCommon;" & _
"Integrated Security=SSPI;"


' Create the Connection and Recordset objects.
Set Conn = New ADODB.Connection
Set Rs1 = New ADODB.Recordset

' Open the connection and execute.
Conn.Open sConnString

'Open recordset
strQuery1 = "SELECT * FROM Orders Where OrdStat = 1 order by OrderId"
Set Rs1 = Conn.Execute(strQuery1)

' Check we have data.
If Rs1.EOF Then
' Close the recordset
MsgBox "Error: No records returned.", vbCritical
Exit Sub
End If

While Not Rs1.EOF
'Doorloop recorset
blnPrintBon = False

If Rs1!OrderActive = True Then 
Rs1_OrderId = Rs1!OrderId

'Hierna komen een aantal controles waaraan het order moet voldoen 
If ....... then
blnPrintBon = True 
End if

If blnPrintBon = True Then
blnstatus = fnctPrintBon(Rs1_OrderId)

If blnstatus = True Then
Call SubUpdate_Status(Rs1_OrderId)

strQuery1 = "SELECT * FROM Orders Where OrdStat = 1 and OrderId >= " & Rs1_OrderId & " order by OrderId"
Set Rs1 = Conn.Execute(strQuery1)
End If
End If
Read_Next_Record:
Rs1.MoveNext
Wend

' MsgBox "Klaar"
'
' Clean up
Rs1.Close
If CBool(Conn.State And adStateOpen) Then Conn.Close
Set Conn = Nothing
Set Rs1 = Nothing

On Error GoTo 0
Exit Sub

err_CheckOrders:
fnctSendError 0, "Error in " & Me.Name & "- CheckOrders: (" & Err.Number & ") - " & Err.Description
' MsgBox "CheckOrders: (" & Err.Number & ") - " & Err.Description
Resume Next
End Sub
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''
Sub SubCloseWb()
Application.DisplayAlerts = False

With ThisWorkbook
.Saved = False
.Close
End With
End Sub
 
Ariane,

Ik zie dat je dezelfde code hebt staan als origineel, dus zonder mijn suggestie?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan