Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1480to1484
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

Makro Laufzeitfehler 1004

Makro Laufzeitfehler 1004
14.03.2016 08:36:53
Johann
Hallo,
ich habe ein Makro mit dem Recorder aufgezeichnet und ein paar "Ranges" hinzugefügt.

Sub markieren()
Range("J3618:AH3705,J3708:AH3795,J3798:AH3885,J3888:AH3975,J3978:AH4065,J4068:AH4155,J4158: _
AH4245,J4248:AH4335,J4338:AH4425,J4428:AH4515,J4518:AH4605,J4608:AH4695,J4698:AH4785,J4788:AH4875,J4878:AH4965,J4968:AH5055,J5058:AH5145,J5148:AH5235,J5238:AH5325,J5328:AH5415,J5418:AH5505,J5508:AH5595,J5598:AH5685,J5688:AH5775,J5778:AH5865,J5868:AH5955,J5958:AH6045,J6048:AH6135,J6138:AH6225,J6228:AH6315,J6318:AH6405,J6408:AH6495,J6498:AH6585,J6588:AH6675,J6678:AH6765,J6768:AH6855,J6858:AH6945,J6948:AH7035,J7038:AH7125,J7128:AH7215,J7218:AH7305,J7308:AH7395,J7398:AH7485,J7488:AH7575,J7578:AH7665,J7668:AH7755,J7758:AH7845,J7848:AH7935,J7938:AH8025,J8028:AH8115,J8118:AH8205,J8208:AH8295,J8298:AH8385,J8388:AH8475,J8478:AH8565,J8568:AH8655,J8658:AH8745,J8748:AH8835,J8838:AH8925,J8928:AH9015,J9018:AH9105,J9108:AH9195,J9198:AH9285,J9288:AH9375,J9378:AH9465").Select
End Sub
Wenn ich das Makro nun ausführen möchte, kommt der Laufzeitfehler 1004. Ist das so, dass das  _
Makro zu Lang ist? Nach ausprobieren führt er das Makro nur bis zu Range J5148:AH5235 aus.  _
Sobald ich die Zeilen am Ende durch _ versuche zu Trennen, erhalte ich auch einen Fehler. Kann mir jemand helfen?

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Laufzeitfehler 1004
14.03.2016 09:19:41
Steve
Hallo Johann,
der Fehler liegt sehr wahrscheinlich darin begründet, dass deine Zellenbezeichnung, welche ja ein Text ("") ist zu lang ist. Mehr als 256 Zeichen ist nämlich etwas kritisch in Excel. Aber das lässt sich umgehen indem du eine Vereinigungsmenge (Union) bildest:
Sub markieren()
Dim rBereich As Range
Set rBereich = Union(Range("J3618:AH3705, J3708:AH3795, J3798:AH3885, J3888:AH3975"), _
Range("J3978:AH4065 , J4068:AH4155 , J4158:AH4245 , J4248:AH4335"), _
Range("J4338:AH4425 , J4428:AH4515 , J4518:AH4605 , J4608:AH4695"), _
Range("J4698:AH4785 , J4788:AH4875 , J4878:AH4965 , J4968:AH5055"), _
Range("J5058:AH5145 , J5148:AH5235 , J5238:AH5325 , J5328:AH5415"), _
Range("J5418:AH5505 , J5508:AH5595 , J5598:AH5685 , J5688:AH5775"), _
Range("J5778:AH5865 , J5868:AH5955 , J5958:AH6045 , J6048:AH6135"), _
Range("J6138:AH6225 , J6228:AH6315 , J6318:AH6405 , J6408:AH6495"), _
Range("J6498:AH6585 , J6588:AH6675 , J6678:AH6765 , J6768:AH6855"), _
Range("J6858:AH6945 , J6948:AH7035 , J7038:AH7125 , J7128:AH7215"), _
Range("J7218:AH7305 , J7308:AH7395 , J7398:AH7485 , J7488:AH7575"), _
Range("J7578:AH7665 , J7668:AH7755 , J7758:AH7845 , J7848:AH7935"), _
Range("J7938:AH8025 , J8028:AH8115 , J8118:AH8205 , J8208:AH8295"), _
Range("J8298:AH8385 , J8388:AH8475 , J8478:AH8565 , J8568:AH8655"), _
Range("J8658:AH8745 , J8748:AH8835 , J8838:AH8925 , J8928:AH9015"), _
Range("J9018:AH9105 , J9108:AH9195 , J9198:AH9285 , J9288:AH9375"), _
Range("J9378:AH9465"))
rBereich.Select
End Sub
Dabei musst du nicht zwingend die Union einer Variable zuweisen wie ich es getan habe, sondern kannst sie auch gleich selectieren wie bei deinem Ausschnitt, ich finde das jedoch übersichtlicher. Zudem sollte man sowieso den Select-Befehl vermeiden. Schaue dazu bitte bei folgendem Link vorbei:
http://www.online-excel.de/excel/singsel_vba.php?f=78
lg Steve

Anzeige
AW: Makro Laufzeitfehler 1004
14.03.2016 10:06:38
Johann
Hallo Steve,
vielen Dank für deine Antwort :)
Das Makro funktioniert soweit, jedoch kann ich scheinbar nur 23 Zeilen innerhalb der Union Funktion benutzen. Ich mache die Bereiche dann einfach nacheinander :)
Und leider muss ich Select benutzen, da ich mich in VBA !noch! nicht so gut auskenne und ich eben tatsächlich diese Bereiche nur markieren möchte um sie zu Formatieren und als Druckbereich festzulegen.

AW: Makro Laufzeitfehler 1004
14.03.2016 10:15:47
Steve
Hallo nochmal,
auch wenn du Anfänger bist, willst du doch sicher nicht für immer ein solcher bleiben, oder? :)
Warum musst du denn diese Bereich formatieren und als Druckbereich festlegen? Für soetwas eignet sich doch oftmal eine Vorlage. Damit entfällt auch jeglicher Makro-Einsatz. Die Datei nach der Erstellung einfach als "Excel-Vorlage (*xltx)" speichern und keiner kann sie ausversehen mehr überschreiben.
lg Steve

Anzeige
AW: Makro Laufzeitfehler 1004
14.03.2016 09:20:47
EtoPHG
Hallo Johann,
probiere:
Sub markieren()
Dim rngSel As Range
Set rngSel = Union( _
Range("J3618:AH3705,J3708:AH3795,J3798:AH3885,J3888:AH3975,J3978:AH4065,J4068:AH4155"), _
Range("J4158:AH4245,J4248:AH4335,J4338:AH4425,J4428:AH4515,J4518:AH4605,J4608:AH4695"), _
Range("J4698:AH4785,J4788:AH4875,J4878:AH4965,J4968:AH5055,J5058:AH5145,J5148:AH5235"), _
Range("J5238:AH5325,J5328:AH5415,J5418:AH5505,J5508:AH5595,J5598:AH5685,J5688:AH5775"), _
Range("J5778:AH5865,J5868:AH5955,J5958:AH6045,J6048:AH6135,J6138:AH6225,J6228:AH6315"), _
Range("J6318:AH6405,J6408:AH6495,J6498:AH6585,J6588:AH6675,J6678:AH6765,J6768:AH6855"), _
Range("J6858:AH6945,J6948:AH7035,J7038:AH7125,J7128:AH7215,J7218:AH7305,J7308:AH7395"), _
Range("J7398:AH7485,J7488:AH7575,J7578:AH7665,J7668:AH7755,J7758:AH7845,J7848:AH7935"), _
Range("J7938:AH8025,J8028:AH8115,J8118:AH8205,J8208:AH8295,J8298:AH8385,J8388:AH8475"), _
Range("J8478:AH8565,J8568:AH8655,J8658:AH8745,J8748:AH8835,J8838:AH8925,J8928:AH9015"), _
Range("J9018:AH9105,J9108:AH9195,J9198:AH9285,J9288:AH9375,J9378:AH9465"))
rngSel.Select
End Sub

Bevor du allerdings .Select in VBA brauchst, solltest du Der Malermeister und sein Geselle lesen.
Gruess Hansueli

Anzeige
AW: Makro Laufzeitfehler 1004
14.03.2016 09:32:06
Daniel
Hi
das Problem ist, dass in VBA der Text für die Zelladresse in der Rangefunktion nicht länger als 256 Zeichen sein darf.
eine Möglichkeit wäre hier, mehrere Ranges mit UNION zu einer Range zu verbinden:
Union(Range(...), Range(...), Range(...)).Select
in deinem Fall könnte man ggf auch über INTERSECT einges verkürzen, da immer die selben Spalten verwendet werden:
Intersect(Range("J:AH"), Range("3618:3705,3708:3795,3798:3885,...)).Select
desweitern musst du beachten, dass wenn du den Zeilenumbruch in einer VBA-Zeile mit "_" machen willst, dieser nicht innerhalb eines längern Textstrings liegen darf.
Wenn das sein soll, musst du den Teiltext beenden, mit "_" die neue Zeile beginnen und die Teiltexte mit "&" verketten.
Das sieht dann in etwa so aus:
Range("J3708:AH3795,J3798:AH3885,J3888:AH3975,J3978:AH4065,J4068:AH4155,J4158:" &  _
"AH4245,J4248:AH4335,J4338:AH4425,J4428:AH4515,J4518:AH4605,J4608:AH4695").Select

Da bei dir die Zellen regelmäßig angeordnet sind, könntest du das ganze auch mit Hilfe von Variablen in einer Schleife lösen:
dim rng as Range
dim Zeile as Long
set rng = Cells(3618, 10).resize(87, 25)
For Zeile = 3708 to 9378 Step 90
set rng = Union(rng, cells(Zeile, 10).Resize(87, 25))
next
rng.Select

Gruß Daniel

Anzeige
AW: Makro Laufzeitfehler 1004
14.03.2016 12:40:40
Johann
Hallo Daniel,
das Makro ist perfekt! Vielen Dank! Nun muss ich nicht mehr alle Zeilen und Spalten eintragen :)

239 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige