Anzeige
Archiv - Navigation
1716to1720
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

Laufzeitfehler

Laufzeitfehler
22.10.2019 19:55:34
Dubach
Liebe Fachleute
Seit einem Update auf Excel 2016 (64-Bit) und Win10 läuft eines von drei Makros aus unerfindlichen Gründen nicht mehr. Es wird ein Laufzeitfehler 1004 ausgegeben (Die Methode 'Worksheets' für das Objekt '_Global' ist fehlgeschlagen). Hier der Code:
Sub Datenqualität_Publikationsdateien_Erstellen()
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
'Variablendeklaration
Dim myZieldatei As Variant
Dim myStationen As Variant
Dim strPfad As String
Dim lcFileName As Variant
Dim lcBlattname As Variant
Dim strPassw As String
Dim i As Integer
Dim j As Integer
Dim z As Integer
Dim sc As Integer
myZieldatei = Worksheets("Administration").Range("tb_Zieldatei").Value
myStationen = Worksheets("Administration").Range("tb_Stationen").Value
strPfad = ThisWorkbook.Path & "\"
strPassw = "pco"
For i = 1 To UBound(myZieldatei, 1)
ThisWorkbook.Sheets.Copy
lcFileName = strPfad & "02_2019_Datenqualität_" & myZieldatei(i, 1)
ActiveWorkbook.SaveAs Filename:=lcFileName, FileFormat:=xlOpenXMLWorkbook
'Fremde Blätter löschen
For j = 1 To UBound(myStationen, 1)
lcBlattname = myStationen(j, 3)
If myStationen(j, 6)  myZieldatei(i, 1) Then
Worksheets(lcBlattname).Delete
End If
Next j
'Gruppierung einklappen, Cursor auf Zelle A37, Blätter mit Passwort schützen
sc = Worksheets.Count
For z = 1 To sc
Sheets(z).Outline.ShowLevels Rowlevels:=1
Cells(1, 37).Select
ActiveWindow.DisplayHeadings = False
Sheets(z).Protect Password:=strPassw, DrawingObjects:=True, Contents:=True,
Scenarios:= True, AllowFiltering:=True
Next z
Worksheets(1).Activate
Worksheets("Administration").Visible = xlSheetVeryHidden
With ActiveWorkbook
.Protect Password:=strPassw, Structure:=True, Windows:=False
.Save
.Close
End With
Next i
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Die Dateien wurden erstellt!"
End Sub

Dieser Code wird aus der Datei https://www.herber.de/bbs/user/132668.xls
heraus gestartet. Diverse Parameter befinden sich dort im Sheet "Administration". Ziel ist, am Ende eine Datei "Sommer" bzw. "Frühling" zu haben, welcher nur die ihr zugewiesenen Sheets enthalten. Die Quelldaten sind viel umfangreicher - doch geht es hier ja um den Lösungsansatz. Das Makro bleibt beim Löschen-Befehl hängen und Excel stürzt ab.
Die anderen beiden Makro-Dateien sind analog aufgebaut, laufen jedoch problemlos. Wir finden einfach den Fehler nicht.
Das Makro läuft übrigens unter Excel 2010 oder 2019 (64-Bit) fehlerlos durch. Was muss im Code geändert werden, damit es unter Excel 2016 (64-Bit) läuft? Danke für eure Hinweise und den Support.

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler
22.10.2019 21:20:18
onur
Welches Makro denn? Da ist kein Einmziges.
Poste die Datei doch mal als .xlsm (warum .xls?) und verate, welches Makro du meinst und wie es gestartet wird.
AW: Laufzeitfehler
22.10.2019 21:29:36
Piet
Hallo Dubach
ich habe bei mir einen Fehler entdeckt, wo Excel wirklich komplett abstürzt'
ThisWorkbook.Sheets.Copy - Da fehlt die Angabe welches Blatt gemeint ist!
Ich weiss nicht ob damit alles behoben ist. Prüft das bitte mal bei euch nach.
mfg Piet
AW: Laufzeitfehler
22.10.2019 21:50:24
Dubach
Sorry - offenbar machte ich einen Fehler beim Hochladen der Datei. Hier nun die korrekte Version, in welcher das Makro aufgerufen werden kann: https://www.herber.de/bbs/user/132671.xlsm
Nach dem Start des Makros wird genau diese Datei kopiert und gemäss Code weiter bearbeitet.
Anzeige
AW: Laufzeitfehler
22.10.2019 21:59:24
onur
In welcher Zeile kommt die Meldung?
AW: Laufzeitfehler
22.10.2019 22:11:29
Piet
Hallo Onur
ich hatte den Code aus dem 1. Post ins Beispiel kopiert. Excel stürte nach dem Start bei mir komplett ab, markierte aber noch die von mir beanstandete Zeile wo das Sheet ohne (Index) kopiert wird' Wie sieht der Fehler bei dir aus? Muss man "Alle Sheets" ggf. in ein Array packen?
mfg Piet
AW: Laufzeitfehler
22.10.2019 22:18:21
onur
Bei mir kommt gar kein Fehler - deswegen auch meine Frage.
AW: Laufzeitfehler
22.10.2019 22:14:12
Dubach
Auf Zeile 37:
'Fremde Blätter löschen
For j = 1 To UBound(myStationen, 1)
lcBlattname = myStationen(j, 3)
If myStationen(j, 6) myZieldatei(i, 1) Then
// Hier folgt die Zeile 37:
Worksheets(lcBlattname).Delete
End If
Next j
Das Sheet, welches als erstes die Lösch-Bedingung erfüllt, wird nicht gelöscht. Es bleibt unverändert in der Datei. Das Makro geht weiter auf das nächste j-Element und läuft durch bis auf die Zeile 37. Dann verabschiedet sich Excel.
Anzeige
AW: Laufzeitfehler
22.10.2019 22:45:49
onur
Füge mal davor ein ActiveWorkbook. ein.
ActiveWorkbook.Worksheets(lcBlattname).Delete

AW: Laufzeitfehler
22.10.2019 23:29:12
Piet
Hallo
da es offenbar ein Löschproblem gibt, dazu bei letzten Blatt, weise ich auf diese Zeile hin:
For j = 1 To UBound(myStationen, 1) - was passiert wenn man die "1" auf "0" setzt, oder es so macht:
For j = LBound(myStationen, 1) To UBound(myStationen, 1)
mfg Piet
AW: Laufzeitfehler
23.10.2019 08:24:04
Dubach
Danke für die Hinweise. Leider lösen die erwähnten Ansätze (Einfügen von ActiveWorkbook, LBound/UBound, Array mit 0 initialisieren) das Problem nicht.
AW: Laufzeitfehler
23.10.2019 17:40:02
onur
Wenn der Fehler kommt, einfach mal "Debuggen" anklicken und im Localfenster den Wert von
lcBlattname
auslesen.
Anzeige
AW: Laufzeitfehler
23.10.2019 20:29:45
Dubach
Der Wert von lcBlattname passt perfekt. Jeder andere Befehl wie z.B. Worksheets(lcBlattname). Active oder select oder ein visible=Hidden usf. funktioniert. Auch ein MsgBox lcBlattname-Befehl reagiert immer korrekt und gibt den richtigen Wert aus. Einzig der Delete-Befehl führt zum Absturz.
Inzwischen ist der VeryHidden-Befehl mein provisorischer Workaround für das Problem. Die finale Datei im Produktivumfeld hat eine Gröss von ca. 2MB, was noch gerade tolerabel ist.
AW: Laufzeitfehler
23.10.2019 20:35:15
Piet
Hallo
bei dem Thread muss ich technisch auch "das Handtuch werfen", schlage aber vor den Fehlerfall abzufsngen dass das Blatt nicht exisitiert, oder der Name nicht übereinstimmt! Zum Fakt warum das 1. Blatt nicht gelöscht wird ist meine Frage: was steht denn in der Spalte R? Ist Sommer falsch geschrieben, oder mit einem Space am Ende?
Kann das ein Auswertungsfehler sein? (siehe myStationen oder myZieldatei?)
mfg Piet
               'Fremde Blätter löschen
'Fremde Blätter löschen
For j = 1 To UBound(myStationen, 1)
lcBlattname = myStationen(j, 3)
If myStationen(j, 6)  myZieldatei(i, 1) Then
If Not IsError(Evaluate(lcBlattname & "!A1")) Then
Worksheets(lcBlattname).Delete
Else
MsgBox lcBlattname & " dieses Blatt existiert nicht!"
End If
End If
Next j

Anzeige
AW: Laufzeitfehler
23.10.2019 20:46:57
onur
Hi Piet,
Daran kann es eigentlich auch nicht liegen, denn bei mir läuft der Code fehlerfrei durch, auch wenn jede Menge "Sind Sie sicher usw" kommt.
Jedenfalls läuft problemlos er mit der Datei, die er gepostet hat.
AW: Laufzeitfehler
23.10.2019 21:02:45
Dubach
Hi Piet
Gerne probiere ich morgen deine Variante auch noch aus. Inzwischen glaube ich, dass der Fehler definitiv nicht in falschem Code steckt. Ich habe zwei andere Excel-Dateien, wo ich mit dem identischen Code die gewünschten Blätter löschen kann - ohne Absturz. Deshalb verstehe ich das Ganze nicht ...
Ich habe ein paar andere Befehle verwendet, um genau die von dir erwähnten Probleme ausschliessen zu können. Hier meine Test-Codes:
'Fremde Blätter löschen
For j = 1 To UBound(myStationen, 1)
lcBlattname = myStationen(j, 7)
If myStationen(j, 13) myZieldatei(i, 1) Then
'// 1. Option: führt zu Absturz
'Worksheets(lcBlattname).Delete
'// 2. Option: gibt richtigen Sheet-Namen aus, wenn die Bedingung erfüllt ist:
MsgBox lcBlattname
'// 3. Option: Selektiert das Sheet, wenn die Bedingung erfüllt ist:
Worksheets(lcBlattname).Select
'// 4. Option: Blendet das Sheet aus, wenn die Bedingung erfüllt ist:
Worksheets(lcBlattname).Visible = xlSheetVeryHidden
End If
Next j
Gibt es vielleicht noch irgendeine Makro-Einstellung, welche irgendwo etwas abspeichert? Interessanterweise hat das Makro gleich nach dem Update funktioniert. Aber eben nur beim allerersten Mal. Schon bei der 2. Ausführung stürzte Excel ab.
Danke an dieser Stelle für die bisherigen Inputs.
Lg
Anzeige
AW: Laufzeitfehler
23.10.2019 21:45:58
Piet
Hallo
das ganze ist ein grosses Raetselraten, ohne das mir eine plausible technische Erklaerung dazu einfaellt. In dem Fall kann man nur versuchen Excel auszutricksen. Es muss etwas geben was Excel stört, aber was?
Was passiert wenn du vor dem löschen den Befehl setzt: - Worksheets(lcBlattname).Cells.Clear
Können sich noch versteckte Objekte im Blatt befinden? Ich hatte einmal Probleme mit Absturz wegen Unformaierten Zellen, was normalerweise NICHT vorkommen kann!! Das Blatt hatte eine "Macke"!!
mfg Piet
AW: Laufzeitfehler
23.10.2019 21:55:31
Dubach
Hallo
Diesen Verdacht hatte ich auch schon und habe deshalb die ganzen Zellen und Spalten komplett rausgelöscht. Ich habe auch noch die Datei einmal komplett neu unter Win10/Excel2106 angelegt. Nicht dass da noch was von der alten Version vorhanden war. Hat aber Alles nichts gebracht.
Werde morgen aber auch diesen Tipp noch anwenden. Danke.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige