Collapse column

Autor Thema: VBA - Excel-File komplett schließen  (Gelesen 28330 mal)

Offline HansImGlück

  • Newbie
  • *
  • Beiträge: 8
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
VBA - Excel-File komplett schließen
« am: September 28, 2012, 13:33:49 Nachmittag »
Liebes Forum,

ich habe das Problem dass ich mein erzeugtes Excel-File nicht komplett schließen kann. Ich habe schon vieles ausprobiert und langsam weiß ich echt nicht mehr weiter. Ich habe bereits versucht:
Code: Visual Basic
  1. 1.  ActiveWorkbook.Save
  2.     ActiveWorkbook.Close
  3.  
  4. 2.  Set ExcelSheet = Nothing
  5.     Set ExcelWorkbook = Nothing
  6.     ExcelApp.Quit
  7.     Set ExcelApp = Nothing
  8.  
  9. 3.  ExcelWorkbook.Close (True)
  10.  

 alles zusammen, getrennt und auch alle möglichen Variationen. Ich finde das Excel-File immer noch über meinen Task-Manager. Lustig ist sobald ich das Makro beende schließt sich auch das Excel-File. Ich brauche glaub ich nicht zu erwähnen das es zwingend notwendig ist das Excel-File während des Betriebes zu beenden. Falls jemand eine Idee hat woran es liegen kann, dass ich das Excel-File nicht komplett schließen kann, wäre ich sehr dankbar für mögliche Lösungsvorschläge.

Schon-Mal vorab Danke für Eure Hilfe.
« Letzte Änderung: Oktober 01, 2012, 16:07:52 Nachmittag von HansImGlück »

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: VBA - Excel-File komplett schließen
« Antwort #1 am: September 28, 2012, 19:12:59 Nachmittag »
Hallo HansImGlück...

hängt auch davon ab, wie Du es geöffnet hast; eine Methode, eine Excel Datei per Code zu
schließen wäre...

Code: Visual Basic
  1. Application.Workbooks("_DER_NAME_DER_MAPPE.XLSX_").Close True
  2.  

_DER_NAME_DER_MAPPE.XLSX_ wäre dann der Dateiname, ohne Pfadangabe.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline HansImGlück

  • Newbie
  • *
  • Beiträge: 8
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
Antw: VBA - Excel-File komplett schließen
« Antwort #2 am: Oktober 01, 2012, 08:43:55 Vormittag »
Hallo maninweb,

vorab herzlichen Dank für deine Antwort. Die Methode .Workbooks existiert leider nicht.  :( Mit .w beginnend habe ich lediglich

Application ->

1.Width
2.Windows
3.WindowState
4.WordBasic

Gruß
HansInGlück

Offline Officer

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 59.503
    • Profil anzeigen
    • Excel-Inside Solutions
  • Office-KnowHow: Profi
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2019 / Office 365
Antw: VBA - Excel-File komplett schließen
« Antwort #3 am: Oktober 01, 2012, 11:56:01 Vormittag »
Hallo HansImGlück,

bist Du auch im VBA-Editor von Excel?

Der Befehl Workbooks steht in der Auswahl zu Application zur Verfügung, siehe Abbildung.



Gruß

Officer
Weitere Informationen, Tipps & Tricks findest du auf Excel-Inside.de
Bitte erfolgreich beantwortete Fragen als gelöst kennzeichnen -  zur Anleitung

Offline HansImGlück

  • Newbie
  • *
  • Beiträge: 8
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
Antw: VBA - Excel-File komplett schließen
« Antwort #4 am: Oktober 01, 2012, 12:36:57 Nachmittag »
Hallo Officer,

auch dir erstmals ein Dank, für die Bemühung mir zu helfen. Anscheinend habe ich einen essentiellen Teil unterschlagen. Der VBA-Code befindet sich in einem Word-Dokument, ich glaube dies ist der Grund warum ich keine Workbooks aufrufen kann, klar Word besitzt sowas nicht.
Nun versuche ich das Problem etwas detaillierter zu schildern. Ich habe eine User-Form erstellt, in welche man verschiedene Dinge eintragen kann. Das Makro soll die Informationen aus der User-Form in ein Excel-File schreiben, tut es auch genau 1 mal. Wenn ich den Button erneut drücke wird eine neue Instanz eines Excel-File erstellt. Irgendetwas referenziert jedoch auf die zuvor erstellte Instanz und es knallt. Daher meinte ich ja das es zwingend notwendig ist die Instanz komplett zu schließen.

Gruß

HansImGlück
« Letzte Änderung: Oktober 01, 2012, 13:11:17 Nachmittag von HansImGlück »

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: VBA - Excel-File komplett schließen
« Antwort #5 am: Oktober 01, 2012, 13:33:09 Nachmittag »
Hallo HansImGlück...

hier ein Beispiel, wo ein Verweis von Word aus (VBA Editor -> Extras -> Verweise -> MS Excel Object Lib)
gesetzt werden muss. In dieser Variante steht Dir IntelliSense zur Verfügung.
Code: Visual Basic
  1.   Public Sub TestMitVerweis()
  2.    
  3.     Dim objExcel          As Excel.Application
  4.     Dim objExcelWorkbook  As Excel.Workbook
  5.     Dim strExcelFile      As String
  6.     Dim strExcelPath      As String
  7.    
  8. '   Excel Instanz...
  9.    
  10.     Set objExcel = New Excel.Application
  11.    
  12. '   Prüfen...
  13.    
  14.     If Not objExcel Is Nothing Then
  15.      
  16. '     Datei...
  17.      
  18.       strExcelPath = "E:\Temp"
  19.       strExcelFile = "Test.xls"
  20.      
  21. '     Mappe öffnen...
  22.      
  23.       Set objExcelWorkbook = objExcel.workbooks.Open(strExcelPath & "\" & strExcelFile)
  24.      
  25. '     Prüfen...
  26.    
  27.       If Not objExcelWorkbook Is Nothing Then
  28.      
  29.         MsgBox objExcelWorkbook.Name
  30.        
  31. '       Schliessen...
  32.        
  33.         objExcelWorkbook.Save
  34.         objExcelWorkbook.Close False
  35.      
  36.       End If
  37.      
  38. '     Aufräumen...
  39.    
  40.       Set objExcelWorkbook = Nothing
  41.      
  42. '     Schliessen...
  43.      
  44.       objExcel.Quit
  45.      
  46.     End If
  47.    
  48. '   Aufräumen...
  49.    
  50.     Set objExcel = Nothing
  51.    
  52.   End Sub
  53.  
Folgend dasselbe Beispiel, aber diesmal ohne Verweis. IntelliSense steht Dir dann nicht
zu Verfügung.
Code: Visual Basic
  1.   Public Sub TestOhneVerweis()
  2.    
  3.     Dim objExcel          As Object
  4.     Dim objExcelWorkbook  As Object
  5.     Dim strExcelFile      As String
  6.     Dim strExcelPath      As String
  7.    
  8. '   Excel Instanz...
  9.    
  10.     Set objExcel = CreateObject("Excel.Application")
  11.    
  12. '   Prüfen...
  13.    
  14.     If Not objExcel Is Nothing Then
  15.      
  16. '     Datei...
  17.      
  18.       strExcelPath = "E:\Temp"
  19.       strExcelFile = "Test.xls"
  20.      
  21. '     Mappe öffnen...
  22.      
  23.       Set objExcelWorkbook = objExcel.workbooks.Open(strExcelPath & "\" & strExcelFile)
  24.      
  25. '     Prüfen...
  26.    
  27.       If Not objExcelWorkbook Is Nothing Then
  28.      
  29.         MsgBox objExcelWorkbook.Name
  30.        
  31. '       Schliessen...
  32.        
  33.         objExcelWorkbook.Save
  34.         objExcelWorkbook.Close False
  35.      
  36.       End If
  37.      
  38. '     Aufräumen...
  39.    
  40.       Set objExcelWorkbook = Nothing
  41.      
  42. '     Schliessen...
  43.      
  44.       objExcel.Quit
  45.      
  46.     End If
  47.    
  48. '   Aufräumen...
  49.    
  50.     Set objExcel = Nothing
  51.    
  52.   End Sub
  53.  
Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline HansImGlück

  • Newbie
  • *
  • Beiträge: 8
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
Antw: VBA - Excel-File komplett schließen
« Antwort #6 am: Oktober 01, 2012, 14:47:05 Nachmittag »
Hallo maninweb,

Dank dir für Die zügige Antwort. Die Object Librarys sind alle aktiviert, daran hat es nicht gelegen. Hab den von dir geschriebenen Code mal an meinen Versuch angepasst, bzw. dein Vorschlag ausprobiert, dies ist jedoch leider vollkommen in die Hose gegangen. Ein Laufzeitfehler war die Folge. Ich habe deinen Code mal an meinen Versuch angepasst, um evtl. mein Anliegen etwas zu verdeutlichen.

Code: Visual Basic
  1. Public Sub TestMitVerweis_Click()
  2.    
  3.     Dim objExcel          As Excel.Application
  4.     Dim objExcelWorkbook  As Excel.Workbook
  5.     Dim objExcelSheet     aS Excel.Worksheet
  6.     Dim strExcelFullName  As String  
  7.     Dim strExcelFile      As String
  8.     Dim strExcelPath      As String
  9.  
  10.    strExcelPath = "E:\Temp"
  11.    strExcelFile = "Test.xls"
  12.    strExcelFullName  = strExcelPath + "\" + strExcelFile
  13.    
  14.    'neues Excel-Objekt erstellen
  15.    Set objExcel =  CreateObject("Excel.Application")
  16.    
  17.  
  18.    'prüfen ob File existiert
  19.   If Fileexists(strExcelFullName) = True Then
  20.       'Instanz auf bestehendes Dokument referenzieren
  21.      Set objExcelWorkbook = objExcel.workbooks.Open(strExcelFullName)
  22.     Else
  23.       'neues workbook hinzufügen
  24.      Set objExcelWorkbook = objExcel.workbooks.add
  25.    End If
  26.    
  27.    'erste Seite im Workbook aufrufen
  28.   Set objExcelSheet = objExcelWorkbook.Worksheet()
  29.    
  30.    'Aufräumen...
  31.   'objExcelWorkbook.Save
  32.   'objExcelWorkbook.Close
  33.   '--------> Funktioniert nicht
  34.  
  35.     objExcelWorkbook.Close (True) '----------> Funktioniert
  36.  
  37.    Set objExcelSheet   = Nothing
  38.    Set objExcelWorkbook = Nothing
  39.    'Schliessen...
  40.   objExcel.Quit
  41.    'Aufräumen...
  42.   Set objExcel = Nothing
  43.  
  44. End Sub
  45.  

p.S. Wie macht man den Code bunt?  ;D

Gruß
HansImGlück
« Letzte Änderung: Oktober 01, 2012, 16:06:14 Nachmittag von HansImGlück »

Offline HansImGlück

  • Newbie
  • *
  • Beiträge: 8
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
Antw: VBA - Excel-File komplett schließen
« Antwort #7 am: Oktober 01, 2012, 15:50:58 Nachmittag »
Hab gerade die Fehlerquelle identifiziert. Benutze noch eine VBA-Schweinerei

Code: Visual Basic
  1. Dim emptyRow As Long
  2. Set objExcelSheet = ExcelWorkbook.Worksheets(1)
  3. emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
  4.  

blende ich die zwei Zeilen aus kann ich das Excel-File schließen. Hat jemand eine Idee wieso es wegen diesen zwei Zeilen nicht klappt?

Gruß
HansImGlück
« Letzte Änderung: Oktober 01, 2012, 16:08:52 Nachmittag von HansImGlück »

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: VBA - Excel-File komplett schließen
« Antwort #8 am: Oktober 01, 2012, 15:56:06 Nachmittag »
Hallo HansImGlück...

Anbei eine weitere Version; Du hattest noch das CreateObject drin, das brauchst Du bei Verweisen nicht.
Ausserdem ist eine neue Mappe noch nicht auf der Platte vorhanden, weshalb Du eine Verzweigung brauchst.

Code: Visual Basic
  1. Public Sub TestMitVerweis_Click()
  2.    
  3.     Dim objExcel          As Excel.Application
  4.     Dim objExcelWorkbook  As Excel.Workbook
  5.     Dim objExcelSheet     As Excel.Worksheet
  6.     Dim strExcelFullName  As String
  7.     Dim strExcelFile      As String
  8.     Dim strExcelPath      As String
  9.     Dim blnCreated        As Boolean
  10.    
  11.     strExcelPath = "E:\Temp"
  12.     strExcelFile = "Test.xls"
  13.     strExcelFullName = strExcelPath & "\" & strExcelFile
  14.     blnCreated = False
  15.    
  16.    'neues Excel-Objekt erstellen
  17.    Set objExcel = New Excel.Application
  18.    
  19.    'prüfen ob File existiert
  20.  
  21.     If Fileexists(strExcelFullName) = True Then
  22.      
  23.      'Instanz auf bestehendes Dokument referenzieren
  24.      Set objExcelWorkbook = objExcel.Workbooks.Open(strExcelFullName)
  25.      
  26.     Else
  27.    
  28.      'neues workbook hinzufügen
  29.      Set objExcelWorkbook = objExcel.Workbooks.Add
  30.      
  31.       blnCreated = True
  32.      
  33.    End If
  34.    
  35.    'erste Seite im Workbook aufrufen
  36.    Set objExcelSheet = objExcelWorkbook.Worksheets(1)
  37.    
  38. '   Generiert oder nicht...
  39.    
  40.     If blnCreated Then
  41.      
  42.       objExcelWorkbook.SaveAs strExcelFullName
  43.       objExcelWorkbook.Close False
  44.      
  45.     Else
  46.      
  47.       objExcelWorkbook.Close True
  48.      
  49.     End If
  50.    
  51.     Set objExcelSheet = Nothing
  52.     Set objExcelWorkbook = Nothing
  53.    
  54.    'Schliessen...
  55.    
  56.     objExcel.Quit
  57.    
  58.    'Aufräumen...
  59.    Set objExcel = Nothing
  60.    
  61. End Sub
  62.  

PS. Code bunt -> [ code = vb ] setzen, ohne Leerzeichen.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline HansImGlück

  • Newbie
  • *
  • Beiträge: 8
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
Antw: VBA - Excel-File komplett schließen
« Antwort #9 am: Oktober 01, 2012, 16:54:15 Nachmittag »
Hallo maninweb,

habe Deinen Rat befolgt und das CreateObject raus genommen und nur

Code: Visual Basic
  1. Set objExcelWorkbook = objExcel.Workbooks.Open(strExcelFullName)
  2.  

benutz. Daraufhin habe ich eine Fehlermeldung erhalten (Siehe Bild).  Spielt es eine Rolle ob ich

Code: Visual Basic
  1. Set objExcel = New Excel.Application
  2.  

oder

Code: Visual Basic
  1. Set objExcel =  CreateObject("Excel.Application")
  2.  
benutze?

Dies scheint aber nicht der Fehler zu sein, denn wie schon erwähnt tritt das Problem nur auf wenn ich folgende Code-Zeilen aktiviert habe

Code: Visual Basic
  1. Dim emptyRow As Long
  2. Set objExcelSheet = ExcelWorkbook.Worksheets(1)
  3. emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 '<-------Diese Zeile scheint der Übeltäter zu sein
  4.  

Beende ich das Excel-File Manuel in Task-Manager, erscheint die Fehlermeldung  Laufzeitfehler '462': (Siehe: Fehler2.png)

Gruß
HansImGlück
« Letzte Änderung: Oktober 01, 2012, 17:12:25 Nachmittag von HansImGlück »

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: VBA - Excel-File komplett schließen
« Antwort #10 am: Oktober 01, 2012, 17:22:30 Nachmittag »
Hallo HansImGlück...

CreateObject() ist dann sinnvoll, wenn Du keinen Verweis auf Excel nutzen möchtest; hatte ich aber schon geschrieben.
Da Du aber den Verweis setzt, brauchst Du es nicht und brauchst nur Set objExcel = New Excel.Application verwenden.

Deine Fehlermeldung rühren daher, dass Du die Objekthierarchie nicht beachtest. Folgendes...
Code: Visual Basic
  1. emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 '<-------Diese Zeile scheint der Übeltäter zu sein
  2.  
kann nicht funktionieren, denn Du musst aus der Excel Instanz heraus referenzieren, sonst nimmt Word
an, dass Du ein Word Objekt ansprechen möchtest. Korrekt wäre also...
Code: Visual Basic
  1. emptyRow = objExcel.WorksheetFunction.CountA(objExcelSheet.Range("A:A")) + 1 '<-------Diese Zeile scheint der Übeltäter zu sein
  2.  

Die korrekte Referenzierung ist auch für jeglichen weiteren Code zu machen, der die Excel Mappe
anspricht, sonst erhälst Du wieder Fehler.

Gruß
« Letzte Änderung: Oktober 01, 2012, 17:24:03 Nachmittag von maninweb »
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline HansImGlück

  • Newbie
  • *
  • Beiträge: 8
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
Office 2010: Antw: VBA - Excel-File komplett schließen
« Antwort #11 am: Oktober 02, 2012, 10:14:49 Vormittag »
Hallo maninweb,

ich freue mich dir mitteilen zu können das meine penetrante Fragerei ein Ende hat. Es funktioniert alles bestens. Alle deine Beiträge haben geholfen, das Problem erfolgreich zu beheben. Folgende Faktoren waren die Ursache für das "Nichtgelingen".

1. Die create-Methode, die du durch den New Konstruktor ersetzt hast.
2. Die boolsche-Variable, die du eingefügt hast um alles richtig zu speichern und zu schließen.
3. Die Ergänzung zur WorksheetFunction.

Vielen herzlichen Dank, für deine ausdauernde, schnelle und professionelle Hilfe.

Mit freundlichen Grüßen

HansImGlück

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.