Microsoft Excel

Herbers Excel/VBA-Archiv

VBA-Close-Befehl erzeugt Fehler | Herbers Excel-Forum


Betrifft: VBA-Close-Befehl erzeugt Fehler von: Ansgar
Geschrieben am: 30.11.2009 13:18:24

Hallo Leute,

habe ein bislang ungelöstes Problem mit der Programmzeile:
Workbooks(datneinz & ".xlsm").Close False

Zum Hintergrund:
Zur Verwaltung von Urlaub wird je Mitarbeiter eine Einzel-Urlaubsliste angelegt, in der der Mitarbeiter seine Urlaubstage einträgt. Um die Übersicht zu behalten, werden diese Einzel-Urlaubslisten mit einer Gesamturlaubsliste mittels externen Bezügen verbunden. Das Verbinden erfolgt per Makro durch Suchen-Ersetzen-Befehl , so dass die Pfad- und Dateinamen auf den jeweiligen Mitarbeitername angepasst werden.

Problem:
Das Makro läuft so lange alle Einzel-Urlaubslisten ab, so lange diese nicht geändert wurden. So bald das Makro eine bereits geänderte öffnet, bleibt das Makro nach Abarbeitung aller anderen Programmzeilen mit der Meldung
"Laufzeitfehler 1004, Anwendungs- oder objektdefinierter Fehler"
auf der o. g. Zeile stehen. Davor lasse ich inzwischen abfragen, ob die Datei überhaupt noch geöffnet ist, was jedoch stets bejaht wird. Beende ich jedoch das Makro, weil eh nichts mehr anderes möglich ist (s. u.), dann ist die Datei aber doch geschlossen.

Fragen:
Warum kann der Befehl nicht ausgeführt werden?
Noch dazu die Frage: Warum kann der Zeilenmarkierer im Makro (gelbe mit Pfeil) nicht von der Zeile wegbewegt werden (was ich noch nie erlebt habe), auf der das Makro mit Fehlermeldung stehen geblieben ist?

Hoffentlich kann mir jemand helfen und im voraus bereits besten Dank.

Gruß
Ansgar

  

Betrifft: AW: VBA-Close-Befehl erzeugt Fehler von: Ramses
Geschrieben am: 30.11.2009 13:55:54

Hallo

Aus der Ferne:

Das ganze Makro im Einzelschritt durchgehen und vor der Zeile prüfen, welchen Wert die Variable "datneinz" hat.
Die Fehlermeldung deutet darauf hin, dass diese Variable keinen Wert, oder den falschen Wert, hat

Gruss Rainer


  

Betrifft: AW: VBA-Close-Befehl erzeugt Fehler von: Albrecht
Geschrieben am: 30.11.2009 14:44:12

Servus Rainer,

daran liegt es leider nicht. Die Variable hat genau den Wert, den sie haben muss. Unmittelbar vor dem Schließen-Befehl lasse ich ja noch mit genau dieser Variablen prüfen, ob die Datei noch geöffnet ist, was stets bejaht wird.

Hoffentlich hast Du noch eine Idee!?

Gruß
Ansgar


  

Betrifft: AW: VBA-Close-Befehl erzeugt Fehler von: Ramses
Geschrieben am: 30.11.2009 14:53:18

Hallo

Ich glaube nach wie vor nicht, dass die Variable den korrekten Inhalt hat, oder dass die Endung nicht korrekt ist.
Sonst müsste es funktionieren.

Sorry,... keine weitere Idee.

Gruss Rainer


  

Betrifft: AW: VBA-Close-Befehl erzeugt Fehler von: Albrecht
Geschrieben am: 30.11.2009 15:28:35

Servus Rainer,

habe jetzt noch mal alles von vorne gemacht, Phänomen ist das gleiche.

Der Variableninhalt ist wirklich ok, denn die Variable zeigt ja den korrekten Inhalt an, wenn das Makro mit der Fehlermeldung stehen geblieben ist, ich den Button "Debuggen" in der Fehlermeldung aktiviere, VBA die fehlerverursachende Zeile markiert und ich mit dem Mauszeiger über die Variable fahre.

Was kann das nur sein? Auf jeden Fall ist es reproduzierbar.

Trotzdem vielen Dank.

Gruß
Ansgar


  

Betrifft: AW: VBA-Close-Befehl erzeugt Fehler von: Ramses
Geschrieben am: 30.11.2009 15:30:00

Hallo

Welchen WERT hat denn die Variable, bzw. was wird denn ausgegeben ?

gruss Rainer


  

Betrifft: AW: VBA-Close-Befehl erzeugt Fehler von: Albrecht
Geschrieben am: 30.11.2009 15:57:19

Servus Rainer,

freut mich, dass Du dran bleibst, der Fehler steckt ja meist im selber nicht mehr sehbaren Detail.

Also folgender Ausschnitt aus dem Code:

Sub UnterroutineUrlaubListeVerb(wburll, wburlvp, na, naz, nas, nvz, nvs, urlj)
    ..
    nachn = Workbooks(wburll).Worksheets("Urlaub Januar-Dezember").Cells(na, nas)
    ..
    datneinz = nachn & "_" & urlj
    Workbooks.Open Filename:=wburlvp & "\" & datneinz & ".xlsm"
    'Berechnung auf manuell
    Application.Calculation = xlCalculationManual
    Workbooks(wburll).Activate
    Range(Cells(na, nvs), Cells(na, nvs + 369)).Select
    Selection.Replace What:=",[*!$", Replacement:=",[" & datneinz & ".xlsm]FGSU!$", _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="'*!$", Replacement:="'" & wburlvp & "\[" & datneinz & ".xlsm]FGSU'! _
$", _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    ActiveWorkbook.Save
    Workbooks(datneinz & ".xlsm").Close False
    ..
End Sub
Wie Du siehst, wird sowohl für das Öffnen der Datei als auch für das Schließen jedes mal der gleiche Variablenname verwendet, der sich im Code dazwischen nicht ändert, da er nicht neu gesetzt wird. Inhalt der Variable "datneinz" lautet z. B. "Groth_2010".

Vor allem ist zu berücksichtigen, dass das für alle Dateien auch problemlos funktioniert, bis die erste Datei geöffnet wird, die nach der Ersterstellung bereits geändert wurde.

Nun hoffentlich noch ne Idee!?


  

Betrifft: AW: VBA-Close-Befehl erzeugt Fehler von: Luschi
Geschrieben am: 30.11.2009 16:41:31

Hallo Albrecht,

bist Dur Dir wirklich sicher, daß nicht doch in irgend einer Ereignis-Routine der aktiven Arbeitsmappe, (da werden ja die Formeln geändert und damit mindestens das 'Worksheet_Change'-Ereignis der Tabelle ausgelöst!), die Workbooks(datneinz & ".xlsm")-Datei geschlossen wird.
Normalerweise schalte ich bei solchen Aktionen die Ergeinis-Routinen ab und hinterher wieder ein.
Warum wird diese Datei überhaupt geöffnet - Ich sehe keine weiteren Zugriffsaktionen darauf.
Hier mal ein Beispiel:

Sub UnterroutineUrlaubListeVerb(wburll, wburlvp, na, naz, nas, nvz, nvs, urlj)
    Dim wb1 As Workbook, wb2 As Workbook
    '..
    nachn = Workbooks(wburll).Worksheets("Urlaub Januar-Dezember").Cells(na, nas)
    '..
    
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    datneinz = nachn & "_" & urlj
    Set wb1 = Workbooks.Open(Filename:=wburlvp & "\" & datneinz & ".xlsm")
    'Berechnung auf manuell
    Set wb2 = Workbooks(wburll)
    wb2.Activate
    Range(Cells(na, nvs), Cells(na, nvs + 369)).Select
    Selection.Replace What:=",[*!$", Replacement:=",[" & datneinz & ".xlsm]FGSU!$", _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="'*!$", Replacement:="'" & wburlvp & _
           "\[" & datneinz & ".xlsm]FGSU'!$", _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
        SearchFormat:=False, _
        ReplaceFormat:=False
    
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Application.EnableEvents = True
        
    wb2.Save
    wb1.Saved = True
    wb1.Close False
    
    Set wb1 = Nothing
    Set wb2 = Nothing
    
End Sub
Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: VBA-Close-Befehl erzeugt Fehler von: Albrecht
Geschrieben am: 30.11.2009 17:26:07

Servus Luschi,

vielen Dank für Deine Antwort, ist aber wirklich nicht luschi, was Du zu bieten hast. Die tatsächlich vorhandenen Routinen zu Ereignissen muss ich noch prüfenm, ist aber nach meiner Erinnerung kein Schließen von einer Datei dabei.

Die Datei wird geöffnet, wenn ich mich an seinerzeit richtig erinnere, damit bei tatsächlich vorgenommenen Ersetzungen von Excel nicht laufend nach der Aktualisierung gefragt wird (was bei 360 Spalten je Zeile sehr nervig war).

Muss mich leider morgen darum kümmern, da ich jetz weg muss. Hoffentlich hast Du dann auch noch Zeit für die Problembeseitigung, denn es muss gehen, da es ja reproduzierbar ist.

Schönen Abend
Albrecht


  

Betrifft: AW: VBA-Close-Befehl erzeugt Fehler von: Albrecht
Geschrieben am: 02.12.2009 16:15:18

Servus Luschi,

habe es leider gestern nicht geschafft.

Mein Problem mit dem Close-Befehl ist unverändert, trotz Deiner Hinweise, Ausprobieren des Abschaltens der Ereignisse, wie Du es vorgeschlagen hast, und noch weiterer Versuche sowie Analysen.

Deine Idee, die Datei einfach nicht zu öffnen, ist aus zwei Gründen nachteilig: Im Gesamtcode wird in der geöffneten Datei zum einen geprüft, ob diese gültig ist (Aufbau, Inhalt). Zum anderen dauert das Suchen-und-Ersetzen bei geschlossener Datei etwa 10-fach so lange, was bei 100 Dateien dann schon nervig ist. Als Alternative habe ich es mir aber gemerkt, denn lieber nicht prüfen und länger warten, als gar nicht laufen.

Hast Du eigentlich Erfahrung damit, dass nach der Fehlermeldung die fehlerbehaftete Makrozeile farblich hinterlegt ist, aber NICHT verlassen werden kann (Randsymbol Pfeil händisch per Maus beispielsweise auf die folgende Makrozeile setzen, damit der Rest wenigstens noch abgearbeitet wird - springt aber immer zur ursprünglichen Makrozeile zurück)?? Welche Gründe gibt es dafür, denn ich habe es bislang noch nie so erlebt? Eine Antwort diesbezüglich wäre vermutlich auch ein Lerneffekt.

Vielen Dank für Deine Hilfe

Gruß
Albrecht


Beiträge aus den Excel-Beispielen zum Thema "VBA-Close-Befehl erzeugt Fehler"