Microsoft Excel

Herbers Excel/VBA-Archiv

Makro Laufzeitfehler 1004

Betrifft: Makro Laufzeitfehler 1004 von: Johann
Geschrieben am: 14.03.2016 08:36:53

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?


  

Betrifft: AW: Makro Laufzeitfehler 1004 von: Steve
Geschrieben am: 14.03.2016 09:19:41

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


  

Betrifft: AW: Makro Laufzeitfehler 1004 von: Johann
Geschrieben am: 14.03.2016 10:06:38

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.


  

Betrifft: AW: Makro Laufzeitfehler 1004 von: Steve
Geschrieben am: 14.03.2016 10:15:47

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


  

Betrifft: AW: Makro Laufzeitfehler 1004 von: EtoPHG
Geschrieben am: 14.03.2016 09:20:47

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


  

Betrifft: AW: Makro Laufzeitfehler 1004 von: Daniel
Geschrieben am: 14.03.2016 09:32:06

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


  

Betrifft: AW: Makro Laufzeitfehler 1004 von: Johann
Geschrieben am: 14.03.2016 12:40:40

Hallo Daniel,

das Makro ist perfekt! Vielen Dank! Nun muss ich nicht mehr alle Zeilen und Spalten eintragen :)


 

Beiträge aus den Excel-Beispielen zum Thema "Makro Laufzeitfehler 1004"