Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
956to960
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
956to960
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

erster Code-Durchlauf = Fehler

erster Code-Durchlauf = Fehler
03.03.2008 00:03:00
Oberschlumpf
Hallo Leute
Ich weiß nicht mehr weiter.
Der Code in dieser Datei
https://www.herber.de/bbs/user/50367.xls
bricht im ersten Durchlauf immer an der markierten Zeile ab.
Laufzeitfehler 1004:
Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen.
Drücke ich dann im Debugger auf Einzelschrittverfolgung oder F5, gibts keine Probleme, und der Code läuft wie gewünscht bis zum Ende.
Ein Einzelschrittdurchlauf im Debugger von Beginn an hat zur Folge, dass KEIN Fehler auftritt.
Der Fehler tritt nur auf, wenn ich das Makro ganz "normal" starten will.
Der Code in der Datei ist alleine leider nicht lauffähig.
Eine Testdatei mit lauffähigem Code kann ich leider nicht zur Verfügung stellen, da der Aufwand zu groß wäre.
Daher hoffe ich, dass es jemanden gibt, der auch ohne Testlauf schnell sieht, was falsch ist.
Vielen Dank für Tipps, Ideen, Hilfen.
Ciao
Thorsten

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: erster Code-Durchlauf = Fehler
03.03.2008 00:10:14
Nepumuk
Hallo Thorsten,
.ActiveSheet.Cells(Rows.Count
bei .ActiveSheet beziehst du die auch das Workbooks(zieldatei) mit Rows.Count aber auf die aktive Tabelle. Das sind zwei unterschiedliche Objekte, daher der Fehler.
Gruß
Nepumuk

AW: erster Code-Durchlauf = Fehler
03.03.2008 00:23:47
Oberschlumpf
Hallo Nepumuk
Danke für deine echt schnelle Antwort.
Aber leider war es das noch nicht (oder ich habs noch immer nicht verstanden :-) ).
Ich habe alle Zeilen

.ActiveSheet.Cells(Rows.Count....


geändert in


.ActiveSheet.Cells(.ActiveSheet.Rows.Count...


Aber leider tritt noch immer der gleiche Fehler in noch immer dieser Zeile


lwksPTS.Range("A" & liTypeData & ",D" & liTypeData & ",F" & liTypeData).Copy


auf.
Hast du vielleicht noch eine Idee? (oder jemand anderes)
Ciao
Thorsten

Anzeige
AW: erster Code-Durchlauf = Fehler
03.03.2008 00:40:48
Daniel
Hi
Ohne die Datei zu testen und die Variablen zu prüfen lässt sich kaum was sagen.
allerdings ist es gefährlich, mit ACTIVESHEET zu arbeiten, wenn man nicht genau weiß, was gerade aktiv ist und was nicht.
Hier sollte, wenn möglich immer genau referenziert werden, um Verwechslungen zu vermeiden.
Beim Durchtesten im Einzielstep-Modus neigt man oft dazu, von Hand das gerade wichtige Blatt vorher schon zu aktivieren, so daß einem derartige Fehler nicht auffallen.
Auch solltest du die SELECTs vermeiden, die sind alle überflüssig.
dh. diese Zeilen

lwksPTS.Range("A" & liTypeData & ",D" & liTypeData & ",F" & liTypeData).Copy
.ActiveSheet.Range("A" & liLetzte).Select
.ActiveSheet.Paste


schreibt man besser so:


lwksPTS.Range("A" & liTypeData & ",D" & liTypeData & ",F" & liTypeData).Copy Destination:=. _
activesheet.Range("A" & liLetzte)


oder so:


lwksPTS.Range("A" & liTypeData & ",D" & liTypeData & ",F" & liTypeData).Copy
.ActiveSheet.Range("A" & liLetzte).pastespecial xlpasteall


ein weiterer Fehler wäre noch, Variablen, die für Zeilen-Nummern verwendet werden, als INTEGER dzu deklarieren.
Integer geht nur bis 32000 und ein paar zerquetschte, deswegen sollten Variablen für Zeilen-Nummern (und auch Spalten-Nummern) immer als LONG deklariert werden.
Speicherplatztechnisch ist das auch günstiger, da als Zeilen-Nummern verwendete Intergervariablen intern in LONG-Variablen umgewandelt werden, auch wenn die zulässige Grösse für Integer nicht überschritten wird. (hat zumindest vor kurzem mal jemand hier im Forum geschrieben)
Gruß, Daniel

Anzeige
AW: erster Code-Durchlauf = Fehler
03.03.2008 09:26:00
Oberschlumpf
Hi Daniel
Auch dir vielen Dank für deine Tipps.
Leider tritt der Fehler immer noch auf.
Ja, es stimmt schon, dass es sich mit vollständigem Code und Daten besser testen lässt, aber, wie schon geschrieben, kann ich die Originaldatei nicht zur Verfügung stellen. Eine Testdatei zu ersetllen, würde zu viel Aufwand machen.
Was das ActiveSheet betrifft, gehe ich eigentlich (noch immer) davon aus, dass immer das "richtige" Blatt im benötigten Moment das aktive ist.
Einige Einzelschrittdurchläufe "zeigten" zumindest, ohne, dass ich bestimmte Blätter manuell auswählte, dass immer das jeweils richtige Blatt angezeigt wurde, somit aktiv war.
Aber trotzdem werde ich mir darüber auch mal Gedanken machen.
Aber anstelle von ...Copy + ...Select ...Paste deinen Code einzusetzen, ist grundsätzlich besser (auch wenn zumindest das aktuelle Problem dadurch nicht verschwindet)
Ich weiß wohl, dass Activate, Select etc in den meisten Fällen überflüssig ist, aber bei den von mir verwendeten Varianten wusste ich bis zu deiner Antwort keine bessere Lösung.
Mir ist auch bekannt, dass Integer-Variablen nur einen Wert bis zu ca. 32000 aufnehmen können, es in Excel aber bis zu ca. 64000 Zeilen gibt (ab XL 2007 sogar noch mehr).
Aber ich weiß auch, dass in meinem Fall nie mehr als 32000 Zeilen verwendet werden - deswegen hab ich die entsprechende Variable als Integer deklariert.
Wieder zu meinem Problem zurück:
Sogar die Verwendung des Befehls

Workbooks("MasterSummary_v3.xls").Sheets("overall_pts").Range("A5,D5,F5").Copy Destination:=.ActiveSheet.Range("A7")


führt auch nur während des ersten Durchlaufs zum selben Fehler, obwohl keine einzige Variable verwendet wird - also liegts nicht an einer Variablen, was ich vermutet hatte.
Ich werde mal weiter nach einer Lösung suchen - vllt mag mir ja jemand dabei helfen.
Vielen Dank
Ciao
Thorsten

Anzeige
AW: erster Code-Durchlauf = Fehler
03.03.2008 09:07:00
Kawensmann
Hallo,
startest du das Makro über einen Button auf der Tabelle aus der Steuerlelemente-Toolbox?
Wenn ja, steht die Eigenschaft "TakeFocusOnClick" des Buttons auf True? Wenn ja, stellt sie mal auf False.
Gruß
Kawensmann

AW: erster Code-Durchlauf = Fehler
03.03.2008 09:30:00
Oberschlumpf
Hi
Nein, zur Zeit wird das Makro durch das Anklicken einer beliebigen Zelle in Sheet1 gestartet.
Das Makro befindet sich in einer Datei, die mit dem Makro an sich nichts zu tun hat.
Das Makro steuert also von "außen" die Dateien, um die es geht.
Auch an dich ein Danke.
Ciao
Thorsten

AW: erster Code-Durchlauf = Fehler
03.03.2008 10:45:00
haw
Hallo Thorsten,
ich kann nur berichten, dass diese Meldung auch bei mir (WinXP-xl2003) manchmal - nicht unbedingt beim ersten Durchlauf, sondern scheinbar "zufällig" auftritt. Ich stellte dann fest, dass das Copy ausgeführt wurde und dann erst die Fehlermeldung auftrat.
Ich habe mir bis jetzt - in Ermangelung einer besseren Lösung und dem Fehlen einer Idee über die Ursache - einfach mit einem Error Resume Next vor der Zeile mit dem Copy (und einem Error Goto 0 danach) beholfen. Dies läuft in vielen Fällen bis jetzt fehlerlos - ist natürlich nicht DIE Lösung.
Trotzdem einen schönen Tag
Heinz

Anzeige
AW: erster Code-Durchlauf = Fehler
03.03.2008 11:03:19
Oberschlumpf
Hallo Heinz
Danke, dass ich nicht der Einzige mit diesem Problem bin :-)
Ich hatte auch schon an die On Error-Lösung gedacht.
Nur leider funktioniert das bei mir nicht, da ja der Fehler eben genau mit der .Copy-Zeile auftritt.
Ein Resume Next führt dann dazu, dass diese .Copy-Zeile gar nicht ausgeführt wird.
Ein Error GoTo 1 - und die .Copy-Zeile mit Zeilennummer = 1 ergibt als Ergebnis, dass der Fehler trotzdem auftritt - als ob On Error gar nicht vorhanden.
Na ja, da es sich dabei tatsächlich nicht um DIE Lösung handelt, hab ich das Problem jetzt so gelöst:
Anstelle von

lwksPTS.Range("A" & liTest & ",D" & liTest & ",F" & liTest).Copy Destination:=.ActiveSheet.Range("A" & liLetzte)


verwende ich nun


With .ActiveSheet
.Range("A" & liLetzte).Value = lwksPTS.Range("A" & liTest).Value
.Range("B" & liLetzte).Value = lwksPTS.Range("D" & liTest).Value
.Range("C" & liLetzte).Value = lwksPTS.Range("F" & liTest).Value
End With


Da es sich im richtigen Code aber nicht nur um 3 Zellen, sondern um ca. 20 handelt, wollte ich mir mit dem .Copy-Befehl Schreibarbeit sparen - 1 Codezeile im Vergleich zu ca. 20 wäre schön gewesen....aber leider will Excel da (noch) nicht :-)
Nun denn...Problem mehr oder weniger gelöst...Thread geschlossen
Vielen Dank an Alle - gelernt habe ich ja trotzdem etwas ;-)
Ciao
Thorsten

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige