Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1120to1124
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA-Close-Befehl erzeugt Fehler

VBA-Close-Befehl erzeugt Fehler
Ansgar
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

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA-Close-Befehl erzeugt Fehler
30.11.2009 13:55:54
Ramses
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
AW: VBA-Close-Befehl erzeugt Fehler
30.11.2009 14:44:12
Albrecht
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
AW: VBA-Close-Befehl erzeugt Fehler
30.11.2009 14:53:18
Ramses
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
Anzeige
AW: VBA-Close-Befehl erzeugt Fehler
30.11.2009 15:28:35
Albrecht
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
AW: VBA-Close-Befehl erzeugt Fehler
30.11.2009 15:30:00
Ramses
Hallo
Welchen WERT hat denn die Variable, bzw. was wird denn ausgegeben ?
gruss Rainer
Anzeige
AW: VBA-Close-Befehl erzeugt Fehler
30.11.2009 15:57:19
Albrecht
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!?
Anzeige
AW: VBA-Close-Befehl erzeugt Fehler
30.11.2009 16:41:31
Luschi
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
Anzeige
AW: VBA-Close-Befehl erzeugt Fehler
30.11.2009 17:26:07
Albrecht
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
Anzeige
AW: VBA-Close-Befehl erzeugt Fehler
02.12.2009 16:15:18
Albrecht
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
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige