Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1944to1948
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 1004

Laufzeitfehler 1004
18.09.2023 15:14:30
Christian
Hallo

ich bitte um Hilfe,

warum bekomme ich im Einzelschrittausführen sobald eine Formel im Blatt Dateien eingefügt werden soll einen Laufzeitfehler 1004. Beim Blatt Rechnung hat alles geklappt?

Das Blatt Dateien existiert. Daran liegt es nicht.

Danke
Christian

Private Sub Rechnung()

Dim LetzteA As Long
Dim LetzteG As Long
Dim LetzteL As Long
Dim LetzteV As Long
Dim LetzteAE As Long
Dim LetzteDA As Long
Dim LetzteDC As Long
Dim LetzteDE As Long

LetzteA = Worksheets("Rechnung").Cells(Rows.Count, 1).End(xlUp).Row
LetzteG = Worksheets("Rechnung").Cells(Rows.Count, 7).End(xlUp).Row
LetzteL = Worksheets("Rechnung").Cells(Rows.Count, 12).End(xlUp).Row
LetzteV = Worksheets("Rechnung").Cells(Rows.Count, 22).End(xlUp).Row
LetzteAE = Worksheets("Rechnung").Cells(Rows.Count, 31).End(xlUp).Row
LetzteDA = Worksheets("Dateien").Cells(Rows.Count, 1).End(xlUp).Row
LetzteDC = Worksheets("Dateien").Cells(Rows.Count, 5).End(xlUp).Row
LetzteDE = Worksheets("Dateien").Cells(Rows.Count, 5).End(xlUp).Row

With Worksheets("Rechnung")

.Range("E2:E" & LetzteA).FormulaLocal = "=ZÄHLENWENN(G$2:G$" & LetzteG & ";B2)"
.Range("E2:E" & LetzteA).Value = .Range("E2:E" & LetzteA).Value2
.Range("J2:J" & LetzteG).FormulaLocal = "=ZÄHLENWENN(B$2:B$" & LetzteA & ";G2)"
.Range("J2:J" & LetzteG).Value = .Range("J2:J" & LetzteG).Value2
.Range("T2:T" & LetzteL).FormulaLocal = "=ZÄHLENWENN(Dateien!A$1:A$" & LetzteDA & ";S2&""*"")"
.Range("T2:T" & LetzteL).Value = .Range("T2:T" & LetzteL).Value2
.Range("AC2:AC" & LetzteV).FormulaLocal = "=ZÄHLENWENN(Dateien!E$1:E$" & LetzteDE & ";AB2&""*"")"
.Range("AC2:AC" & LetzteV).Value = .Range("AC2:AC" & LetzteV).Value2
.Range("AL2:AL" & LetzteAE).FormulaLocal = "=WENN(RANG.GLEICH(AG2;AG$2:AG$42;0)=30;ZÄHLENWENN(Dateien!C$1:C$" & LetzteDC & ";AK2&""*"");"""")"
.Range("AL2:AL" & LetzteAE).Value = .Range("AL2:AL" & LetzteAE).Value2

End With

With Worksheets("Dateien")

.Range("B1:B:" & LetzteDA).FormulaLocal = "=ZÄHLENWENN(Rechnung!S$2:S$" & LetzteL & ";TEIL(A1;1;FINDEN(""~"";WECHSELN(A1;"" "";""~"";LÄNGE(A1)-LÄNGE(WECHSELN(A1;"" "";""""))))-1))"
.Range("D1:D" & LetzteDC).FormulaLocal = "=ZÄHLENWENN(Rechnung!AK$2:AK$" & LetzteAE & ";TEIL(C1;1;FINDEN(""~"";WECHSELN(C1;"" "";""~"";LÄNGE(C1)-LÄNGE(WECHSELN(C1;"" "";""""))))-1))"
.Range("F1:F" & LetzteDF).FormulaLocal = "=ZÄHLENWENN(Rechnung!AB$2:AB$" & LetzteV & ";TEIL(E1;1;FINDEN(""~"";WECHSELN(E1;"" "";""~"";LÄNGE(E1)-LÄNGE(WECHSELN(E1;"" "";""""))))-1))"

.Range("A1:A" & LetzteDA).Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo, Orientation:=xlTopToBottom
.Range("C1:C" & LetzteDC).Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo, Orientation:=xlTopToBottom
.Range("E1:E" & LetzteDE).Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo, Orientation:=xlTopToBottom
End With

End Sub

34
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 1004
18.09.2023 15:27:27
daniel
HI
wo genau tritt der Fehler auf, in welcher Zeile?
das ist immer ein wichtiger Hinweis auf das, was falsch sein könnte.
vor allem dann, wenn du sehr ähnliche Codezeilen hast, ist es immer interessant, ob der Fehler schon bei der ersten Zeile auftritt, oder erst in weiteren.

ich vermute mal, dass der Fehler hier auftritt:
 .Range("C1:C" & LetzteDC).Sort Key1:=.Cells(1, 1),

denn hier ist der Fehler, dass du die Spalte C sortieren willst, aber als Sortierspalte die Spalte A angibst, und die sortierspalte muss ja innerhalb des Sortierbereichs liegen.
du müsstest also schreiben:'
 .Range("C1:C" & LetzteDC).Sort Key1:=.Cells(1, 3),

man sieht zwar häufiger mal das Key:=.Cells(1, 1) aber dann ist in der Regel nur der Sortierbereich Inhalt der WITH-Klammer und nicht das ganze Tabellenblatt wie bei dir.

also entweder:
With Worksheets("Dateien")

.Range("C1:C" & LetzteDA).Sort Key1:=.Cells(1, 3)


oder
With Worksheets("Dateien").Range("C1:C" & LetzteDA)

.Sort Key1:=.Cells(1, 3)


Gruß Daniel
Anzeige
AW: Laufzeitfehler 1004
18.09.2023 15:33:50
Christian
Hallo Daniel,

nein wie ich versucht hatte zu sagen, der Fehler tritt in der ersten Zeile auf in die das Makro eine Formel in Dateien einfügen will, also

.Range("B1:B:" & LetzteDA).FormulaLocal = "=ZÄHLENWENN(Rechnung!S$2:S$" & LetzteL & ";TEIL(A1;1;FINDEN(""~"";WECHSELN(A1;"" "";""~"";LÄNGE(A1)-LÄNGE(WECHSELN(A1;"" "";""""))))-1))"


bis zum sortieren kam das Einzelschrittausführen erst gar nicht, also ich wil mal nicht ausschließen dass die weiteren Zeilen nach der gerade erwähnten auch Fehler enthalten. Bin halt VBA Anfänger.

Mit dem Ausprobieren deines Vorschlags warte ich mal noch ab, da ich nicht weiß wie ich diesen Teil des Makros testen kann ohne von Beginn zu starten.

Gruß
Christian
Anzeige
AW: Laufzeitfehler 1004
18.09.2023 16:48:40
Christian
Hallo Daniel, hab jetzt die 1 in 3 bzw. 5 geändert.

Aber

With Worksheets("Dateien")
.Range("C1:C" & LetzteDA).Sort Key1:=.Cells(1, 3)

habe ch doch abgesehen von der 3 oder 5 da stehen, nur noch ein paar Zeilen dazwischen. Ich verstehe im Moment nicht so ganz worauf du mich damit hinweisen willst.

Danke
Christian
AW: Laufzeitfehler 1004
18.09.2023 16:54:42
Karsten
Also ich habe 'nen Doppelpunkt gesehen?
Frage auf noch offen gesetzt owT
18.09.2023 15:34:15
Christian
.
AW: Laufzeitfehler 1004
18.09.2023 16:07:11
daniel
Hi
wie gesagt, wenn man mehrere sehr ähnliche Programmzeilen hat, loht es sich immer zu prüfen, ob der Fehler nur in dieser einen Zeile auftritt, oder in allen.
Hierzu kannst du den gelben Pfeil, der die Fehlerhafte Zeile markiert, auf die nächste Zeile setzen und dann diese ausführen lassen (F8)
Wenn diese dann fehlerfrei funktioniert, dann sollest du beide Zeilen vergleichen, ob du einen Unterschied findest.
hierbei hilft auch die Schriftart Courier, in der alle Zeichen gleich breit sind.
Wenn man also sehr ähnliche Codezeilen hat, die direkt untereinander stehen, dann sollten auch auch gleiche Dinge immer direkt untereinander (an der selben TAB-Position) stehen.
Bei dir sieht man, dass in der oberen der drei Zeilen ab einer bestimmten Position ein Versatz zu den anderen Zeilen besteht.
Wenn jetzt die darunterliegenden Zeilen funktionieren, dann deutet das darauf hin, dass du in der nicht funktionierenden Zeile ein Zeichen zu viel eingegeben hast.

hier nochmal der relevante Code, die erste Zeile weicht von den anderen ab.
.Range("B1:B:" & LetzteDA).FormulaLocal = "=ZÄHLENWENN(...)"

.Range("D1:D" & LetzteDC).FormulaLocal = "=ZÄHLENWENN(...)"
.Range("F1:F" & LetzteDF).FormulaLocal = "=ZÄHLENWENN(...)"

Findest du deinen Fehler selber?

Gruß Daniel
Anzeige
AW: Laufzeitfehler 1004
18.09.2023 16:42:35
Christian
Hallo DAniel,

wieder was gelernt, zum einen hab ich das wirklich übersehen, zum anderen dachte ich die Anzahl der Leerzeichen wäre egal.

Nur..... leider.... jetzt hab ich nen LZF1004 in der Zeile .Range("F1:F" & LetzteDF).FormulaLocal = also der 3. Formel in Dateien

und da sehe ich kein Leerzeichen zuviel oder " zu viel/zu wenig
AW: Laufzeitfehler 1004
18.09.2023 16:54:47
Christian
ok, den Fehler hab ich dann jetzt auch gefunden, muss natürlich bei der 3. Formel LetzteDE heißen, nicht DF
AW: Laufzeitfehler 1004
18.09.2023 17:36:42
daniel
jetzt bin ich verwirrt.
Der Fehler in dieser Zeile war nicht das Leerzeichen, sondern der Doppelpunkt nach dem zweiten "B"
der dadurch erzeugte Text ist keine gültige Zelladresse, wie sie von Range benötigt wird.

"B1:B:" & LetzteDA ergibt beispielsweise "B1:B:99", müsste aber sein "B1:B99"
in den darunterliegenden Zeilen machst du es richtig.

aber wie kommst du jetzt auf Leerzeichen?
Anzeige
AW: Laufzeitfehler 1004
18.09.2023 17:40:26
Christian
sorry aber das ist mir jetzt gerade selbst ein Rätsel, weil de facto hatte ich den Doppelpunkt gelöscht und das Makro fnktioniert inzwischen auch
AW: Frage auf noch offen gesetzt owT
18.09.2023 15:39:43
onur
Ist das Blatt oder die Datei schreibgeschützt?
AW: Frage auf noch offen gesetzt owT
18.09.2023 15:59:17
Christian
also die Datei ist es nicht,

beim Blatt habe ich sogar erstmal googlen müssen wie man das überhaupt schützt. Also nein


Außerdem ich hab noch ein anderes Makro dass auf das Blatt Dateien zurgreift, da ist das kein Problem.

Könnte es evtl. was damit zu tun haben, dass dieses Makro im Code des Blatts Rechnung liegt? Ich weiß das wär ein ziemlicher Anfängerfehler aber ich weiß wenn es daran liegt nicht wie ich es umschreiben muss.

Gruß
Christian
Anzeige
AW: Frage auf noch offen gesetzt owT
18.09.2023 16:03:56
onur
Nicht das Blatt "Dateien". Du versuchst doch in Blatt "Rechnung" was hinein zu schreiben.
AW: Frage auf noch offen gesetzt owT
18.09.2023 16:11:59
GerdL
Moin Christian!

="|"&TEIL(A1;1;FINDEN(ZEICHEN(126);WECHSELN(A1;" ";ZEICHEN(126);LÄNGE(A1)-LÄNGE(WECHSELN(A1;" ";""))))-1)&"|"


Guck mal, ob da ein schöner Suchbegriff rauskommt. Die Pipes vorne u. hinten sind nur zur Abgrenzung.
Für FormulaLocal musst du die Osterhasen (") natürlich verdoppeln.

Gruß Gerd
AW: Frage auf noch offen gesetzt owT
18.09.2023 16:23:22
Christian
nein, in Dateien, vielleicht mag ich ja auch einen Denkfehler gemacht haben aber das With WS Dateien sollte heißen ab jetzt bitte in Dateien schreiben.
AW: Frage auf noch offen gesetzt owT
18.09.2023 16:24:48
onur
DANN ÄNDERE EINFACH DAS MAKRO SELBST.
Anzeige
AW: Frage auf noch offen gesetzt owT
18.09.2023 16:43:56
Christian
warum bist du jetzt so verärgert?
AW: Frage auf noch offen gesetzt owT
18.09.2023 17:07:46
onur
Entschuldige bitte. Ich hatte übersehen, dass du bereits im Vorfeld geschrieben hattest: "der Fehler tritt in der ersten Zeile auf in die das Makro eine Formel in Dateien einfügen will", ich hatte die Wörter "in Dateien" überlesen....
AW: Frage auf noch offen gesetzt owT
18.09.2023 17:32:42
Christian
kein Problem, kann passieren.

darf ich dich aber noch etwas anderes fragen, wo ich auch nicht weiterkomme, betrifft ein anderes Makro. Sollte aber kein Problem darstellen für einen Profi.

Dieses Makro hier:


Private Sub Punkte()
Dim LetzteA As Long

LetzteA = Worksheets("Punkte").Cells(Rows.Count, 1).End(xlUp).Row
letzteRA = Worksheets("Rechnung").Cells(Rows.Count, 1).End(xlUp).Row
letzteRL = Worksheets("Rechnung").Cells(Rows.Count, 12).End(xlUp).Row

With Worksheets("Punkte")

.Range("B2:B" & LetzteA).FormulaLocal = "=XVERWEIS(A2;Rechnung!B$2:B$" & letzteRA & ";Rechnung!C$2:C$" & letzteRA & ";"""";0;1)"
.Range("B2:B" & LetzteA).Value = .Range("B2:B" & LetzteA).Value2
.Range("C2:C" & LetzteA).FormulaLocal = "=XVERWEIS(A2;Rechnung!B$2:B$" & letzteRA & ";Rechnung!D$2:D$" & letzteRA & ";"""";0;1)"
.Range("C2:C" & LetzteA).Value = .Range("C2:C" & LetzteA).Value2
.Range("D2:D" & LetzteA).FormulaLocal = "=XVERWEIS(A2;Rechnung!O$2:O$" & letzteRL & ";Rechnung!R$2:R$" & letzteRL & ";"""";0;1)"
.Range("D2:D" & LetzteA).Value = .Range("D2:D" & LetzteA).Value2
.Range("F2:F" & LetzteA).FormulaLocal = "=XVERWEIS(A2;Rechnung!O$2:O$" & letzteRL & ";Rechnung!N$2:N$" & letzteRL & ";"""";0;1)"
.Range("F2:F" & LetzteA).Value = .Range("F2:F" & LetzteA).Value2
.Range("G2:G" & LetzteA).FormulaLocal = "=DATEDIF(C2;F2;""Y"")"
.Range("G2:G" & LetzteA).Value = .Range("G2:G" & LetzteA).Value2
.Range("H2:H" & LetzteA).FormulaLocal = "=DATEDIF(C2;F2;""YD"")"
.Range("H2:H" & LetzteA).Value = .Range("H2:H" & LetzteA).Value2
.Range("I2:I" & LetzteA).FormulaLocal = "=WENN(RANG.GLEICH(C2;C$2:C$" & LetzteA & ";0)=30;RANG.GLEICH(C2;C$2:C$" & LetzteA & ";0);"""")"
.Range("I2:I" & LetzteA).Value = .Range("I2:I" & LetzteA).Value2
.Range("J2:J" & LetzteA).FormulaLocal = "=SUMMENPRODUKT((M2:BL2>0)*(M$1:BL$1+1)-M2:BL2)"
.Range("J2:J" & LetzteA).Value = .Range("J2:J" & LetzteA).Value2
.Range("K2:K" & LetzteA).FormulaLocal = "=RANG.GLEICH(J2;J$2:J4" & LetzteA & ";0)"
.Range("K2:K" & LetzteA).Value = .Range("K2:K" & LetzteA).Value2
.Range("L2:L" & LetzteA).FormulaLocal = "=MIN(M2:BL2)"
.Range("L2:L" & LetzteA).Value = .Range("K2:K" & LetzteA).Value2
.Range("M1:BL1").FormulaLocal = "=MAX(M$2:M$" & LetzteA & ")"
.Range("M1:BL1").Value = .Range("M1:BL1").Value2

.Range("A2:BL" & LetzteA).Sort Key1:=.Cells(1, 10), Order1:=xlDescending, Header:=xlNo, Orientation:=xlTopToBottom

End With

End Sub


Du siehst dass die Formel in Spalte I einen Rang ausgibt, wenn dieser kleiner gleich 30 ist.
Wie bekomme ich es VBA mäßig hin, dass in diesen 30 Zeilen die Schriftfarbe im Bereich A:BL auf rot geändert wird und alle anderen Zeilen auf Schwarz.
Die Zelle Zeile 1 soll schwarz bleiben, obwohl in I1 die Zahl 30 steht. Es soll nur um die Zellen gehen, in denen die Formel berechnet wurde also der Bereich "I2:I" & LetzteA
Anzeige
AW: Frage auf noch offen gesetzt owT
18.09.2023 17:38:24
onur
Sorry, aber sowas zu lösen, ohne die Datei zu haben, ist wie Blindschach spielen. Davon kriege ich Kopfschmerzen .
Man muss so einen Code auch mal testen können, und auch das geht nicht ohne Datei.
AW: Frage auf noch offen gesetzt owT
18.09.2023 17:45:25
Christian
Hallo Onur, auch wenn ich nachvollziehen kannst was du meinst.

Das wird dauern eine Datei mit 4,7 MB, die 10 Blätter, 7 PQ Abfragen, 8 Makros hat und als Datenquelle 2 CSV Dateien nutzt so zu verkleinern, dass sie A sich hier hochladen lässt und B immer noch alles beinhaltet damit die Formeln, die ja wie du siehst oft auf andere Blätter verweisen noch alle funktionieren.

Ich weiß jezt grad nicht, was mehr Kopfschmerzen bereitet, sich da reinzudenken, was wie zusammenhängt oder zu versuchen, die bitte mal eben so zu programmieren.
Wenn du trotzdem auf die Datei bestehst mache ich das natürlich

Christian
Anzeige
AW: Frage auf noch offen gesetzt owT
18.09.2023 17:49:20
onur
Die Datei muss nur das enthalten, was für dein Makro relevant ist (damit es laufen kann)- also "Worksheets("Punkte"und Worksheets("Rechnung")". Alles andere ist belanglos.
AW: Frage auf noch offen gesetzt owT
18.09.2023 17:50:38
Christian
ok, den Nachtrag hast du auch gelesen? Werde dann heute Abend mich ransetzen, hab jetzt erstmal um 18:15 Badminton Training
AW: Frage auf noch offen gesetzt owT
18.09.2023 20:15:26
Christian
Hallo Onur,

ok, ich habs jetzt wirklich ganz vereinfacht gemacht.

Beim Öffnen der Datei haben die Zeilen in denen die Zelle in Spalte I leer ist, schwarze Farbe und alle in denen eine Zahl steht rote Schriftfarbe.

Wenn du jetzt das Makro ausführst ändern sich die Zeilen in denen die Zahlen stehen. Mein Wunsch wäre dass sich die Schriftfarben entsprechend mit ändern.
Zeile1 soll außen vor bleiben (immer schwarz bleiben, auch wenn in I1 die 30 steht).

Alles andere hab ich aus der Mappe und dem Makro rausgenommen, da es aktuell funktioniert, nach dem Motto Never Change a Running System.

Viele Grüße und danke
Christian

https://www.herber.de/bbs/user/162950.xlsm
Anzeige
Frage auf noch offen gesetzt owT
18.09.2023 20:15:59
Christian
.
AW: Frage auf noch offen gesetzt owT
18.09.2023 20:45:37
Christian
und das ändert sich dann auch automatisch wenn ich das Makro ausführe oder muss ich dann noch irgendwo draufklicken oder sonst was machen?
Das ist ja der Sinn und Zweck des Makros, wenn neue CSV Dateien da sind, die ganze Mappe inkl. allen Makros, PQ Abfragen Formeln und allem drum und dran in einem Abwasch zu aktualisieren.
Die Formeln hab ich mit in die Makros gepackt wegen der Berechnungszeit. Ich weiß man kann auch die automatische Berechnung alternaiv abschalten aber ich will ja auch ein wenig VBA lernen.
leider passt deine Lösung nicht so ganz...
18.09.2023 20:52:47
Christian
mein Makro hatte offen gelassen, wie viele Zeilen es sind... deine Lösung legt sich auf Zeile 211 als Ende fest.

Mein Satz
"Es soll nur um die Zellen gehen, in denen die Formel berechnet wurde also der Bereich "I2:I" & LetzteA "

war so gemeint, für alle Zeilen zum Zeitpunkt des Starten des Makros. Das war so gedacht, dass sich das anpasst, wenn Zeilen hinzukommen oder gelöscht werden. Deshalb hatte ich ja auch die Variable im Makro benutzt.

Gruß
Christian
AW: leider passt deine Lösung nicht so ganz...
18.09.2023 20:57:11
onur
Dann machst du den Bereich der bedForm halt großzügiger als ich. Nimm halt statt Bis-Zeile 211 die 1000.
AW: leider passt deine Lösung nicht so ganz...
18.09.2023 20:59:45
Christian
ok, mache ich dann so.

Habs grad mit =$A$2:INDEX(A:A;ANZAHL2(A:A) probiert, aber Excel hat meine Formel automatisch in =$A$2:$A$211 geändert

Danke auf jeden Fall für die viele Mühe und noch einen schönen Abend
Christian
AW: leider passt deine Lösung nicht so ganz...
18.09.2023 21:03:20
onur
Ich hab doch geschrieben: "den Bereich der bedingten Formatierung". Weisst du denn nicht, was eine bedingte Formatierung ist?
Ich habe es dir mal geändert:
https://www.herber.de/bbs/user/162952.xlsm
AW: leider passt deine Lösung nicht so ganz...
18.09.2023 21:09:08
Christian
ich weiß was eine b.f. ist ich wollte dir nur sagen dass ich als eigenem Versuch das Ganze mit Index versucht habe zu machen, bevor du den Vorschlag gemacht hast es auf 1000 zu ändern.

das ich mache es dann so, war so gemeint dass ich es dann mit den 1000 so mache.
AW: Frage auf noch offen gesetzt owT
18.09.2023 20:54:42
onur
Es geht nicht um deine Makros - ich meinte damit, dass du für die automatische SCHRIFTFARBE kein Makro brauchst.
kleiner Nachtrag
18.09.2023 17:48:32
Christian
ich habe in den Makros jetzt dank eurer Hilfe alle Fehler gefunden, es geht nur noch um die rote Schriftfarbe

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige