Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makroabbruch - String zu lang?

Makroabbruch - String zu lang?
11.11.2008 11:16:31
lobby007
Hallo Excel-Spezialisten, ich habe ein Makro das eine x-te Reihe selektiert.
Das geht auch ganz toll aber nur bis ca. 150 Reihen - danach bricht er ab.
Kennt jemand die Ursache? Wie kann man das abstellen?

Sub Rows_xx()
Dim lRow As Long
Dim sRows As Variant
Dim bln3 As Integer
Dim eingzeile
eingzeile = InputBox("Jede wievielte Zeile ?")
For lRow = Selection.Row To Selection.Row + Selection.Rows.Count
bln3 = bln3 Mod eingzeile + 1
If bln3 = 1 Then
sRows = sRows & "," & lRow & ":" & lRow
End If
Next lRow
sRows = Right(sRows, Len(sRows) - 1)
Range("" & sRows & "").Select
End Sub


Er bricht in der letzten Codezeile vor End


Sub ab.
Gruß lobby


		
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makroabbruch - String zu lang?
11.11.2008 11:29:40
David
Hallo Namenloser ? (siehe auch Forumsregeln!)
überwache den Wert für sRow, vermutlich ist er in einer Form, die nicht zu Range() passt.
Gruß
David
AW: Makroabbruch - String zu lang?
11.11.2008 12:32:00
lobby007
Hallo David,
vielen Dank für die Antwort - kann lobby kein Name sein?
Habe ich überwacht, die Form ist ok, sonst würde er es ja auch nicht für einige Zeilen machen.
Ich fürchte es läuft eher etwas über?
Gruß Lobby
Anzeige
AW: Makroabbruch - String zu lang?
11.11.2008 13:32:00
Heiko
Hallo Lobby,
dein String hat dann halt eine Länge die 255 Zeichen überschritten und das ist oft eine Grenze bei EXCEL und VBA.
Findest du hier bestimmt bei XL Limits irgendwo:
http://www.xlam.ch/xlimits/index.htm
Also weniger Textlänge bei sRows oder das Ganze in eine Schleife.
Wobei die Frage offen bleibt wozu select, wie sagt Hajo immer schon schön auf select kann man zu 99% verzichten.
Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Makroabbruch - String zu lang?
11.11.2008 14:16:18
lobby007
Hallo Heiko,
danke für die Antwort.
Ich fürchte auch das die Länge das Problem ist.
Frage ist nur: wie soll das ohne Selekt gehen? Ich will ja gerade selektieren.
Oder man zerlegt das in kleinere Teile (die Schleife ist eine gute Idee) - aber mir fällt dazu leider nichts ein.
Gruß lobby
Anzeige
AW: Makroabbruch - String zu lang?
11.11.2008 14:49:26
Heiko
Hallo Lobby,
warum willst du denn selektieren, was willst du damit bewirken.
Gruß Heiko
PS: Rückmeldung wäre nett !
AW: Makroabbruch - String zu lang?
11.11.2008 14:54:57
lobby007
Hallo Heiko,
praktisches Beispiel ist zum einen z.B. jede xte-Zeile anders zu Formatieren.
Manchmal auch löschen wenn man z.B. etwas aus dem Netz kopiert und der Aufbau eben nicht Zeile für Zeile ist sondern nur alle 4 Zeilen der eigentliche Datensatz kommt....
Das gute an dem Makro ist, dass man eben markiert/selektiert, die Selektion dann sieht und dann entscheiden kann, ob man löschen oder formatieren o.ä. will.
Gruß lobby
Anzeige
AW: Makroabbruch - String zu lang?
11.11.2008 15:06:00
Heiko
Hallo Lobby,
nun habe ich deinen Ansatz verstanden.
Da ich dazu aber trotzdem nicht selektieren würde, sondern halt per Schleife jede x-te Zeile direkt formatieren, bzw kopieren, bzw. löschen würde.
Und dein Hinweis

Das gute an dem Makro ist, dass man eben markiert/selektiert, die Selektion dann sieht und dann  _
entscheiden kann, ob man löschen oder formatieren o.ä. will.


ist ja dann hinfällig wenn du wie Eingangs erwähnt mehrere 100 Zeilen markieren willst kannst du eh nicht alle auf einmal sehen.
Kann ich dir dabei leider nicht helfen und lasse die Frage mal offen.
Gruß Heiko

Anzeige
AW: Makroabbruch - String zu lang?
11.11.2008 14:29:18
David
Hallo Lobby,
ich bin der Meinung gewesen, Lobby wäre ein Pseudonym, wenn dem nicht so ist, dann sorry.
Ist zwar prinzipiell ok, aber hier im Forum spricht man sich im Allgemeinen mit dem Vornamen an, steht auch so in der Forums-Etikette.
Gruß
DAvid
AW: Makroabbruch - String zu lang?
11.11.2008 23:51:00
Daniel
Hi
das Problem ist tatsächlich, daß der String innerhalb einer RANGE-Anweisung max. 256 Zeichen lang sein darf (natürlich kann Excel auch länger Strings verarbeiten , aber eben nicht als Berschreibung einer Range)
ne ander Möglichkeit wäre, die Zeilen in einem RANGE-Objekt zu sammeln, damit müsstest du c.a. 8000 Zeilen sammeln können.
der Code müsste dann so aussehen:

Sub Rows_xx()
Dim lRow As Long
Dim rngZeilen As Range
Dim bln3 As Integer
Dim eingzeile
eingzeile = InputBox("Jede wievielte Zeile ?")
For lRow = Selection.Row To Selection.Row + Selection.Rows.Count
bln3 = bln3 Mod eingzeile + 1
If bln3 = 1 Then
If rngZeilen Is Nothing Then
Set rngZeilen = Rows(lRow)
Else
Set rngZeilen = Union(rngZeilen, Rows(lRow))
End If
End If
Next lRow
rngZeilen.Select
End Sub


Gruß, Daniel

Anzeige
AW: Makroabbruch - String zu lang?
12.11.2008 08:02:41
lobby007
Hallo Daniel,
super, das ist es, klappt wie verrückt.
Du hast mir wirklich sehr geholfen.
Ich wünsche Dir einen schönen Tag.
Gruß lobby
;
Anzeige
Anzeige

Infobox / Tutorial

Makroabbruch - String zu lang?


Schritt-für-Schritt-Anleitung

Um das Problem mit der maximalen Länge eines Strings in VBA zu lösen, kannst du folgende Schritte befolgen:

  1. Code anpassen: Stelle sicher, dass dein VBA-Code nicht versucht, einen String zu erstellen, der länger als 255 Zeichen ist. Der folgende Code zeigt, wie du die Zeilen in einem Range-Objekt sammeln kannst:

    Sub Rows_xx()
       Dim lRow As Long
       Dim rngZeilen As Range
       Dim bln3 As Integer
       Dim eingzeile
       eingzeile = InputBox("Jede wievielte Zeile ?")
       For lRow = Selection.Row To Selection.Row + Selection.Rows.Count
           bln3 = bln3 Mod eingzeile + 1
           If bln3 = 1 Then
               If rngZeilen Is Nothing Then
                   Set rngZeilen = Rows(lRow)
               Else
                   Set rngZeilen = Union(rngZeilen, Rows(lRow))
               End If
           End If
       Next lRow
       rngZeilen.Select
    End Sub
  2. Zeilen auswählen: Führe das Makro aus, um die gewünschte Anzahl von Zeilen auszuwählen, ohne die maximale Länge des Strings zu überschreiten.

  3. Anpassungen testen: Überprüfe, ob das Makro nun korrekt funktioniert und die gewünschten Zeilen auswählt.


Häufige Fehler und Lösungen

  • Fehler: "String zu lang"

    • Lösung: Reduziere die Anzahl der Zeilen, die du in einem einzigen String zusammenfasst. Nutze stattdessen ein Range-Objekt wie im obigen Beispiel.
  • Fehler: Makro bricht ab

    • Lösung: Überwache die Länge des Strings während der Ausführung. Du kannst dies tun, indem du eine Debugging-Zeile hinzufügst, um die Länge von sRows vor der Verwendung in Range() zu überprüfen.

Alternative Methoden

Wenn du weiterhin Probleme mit der maximalen Länge von Strings in Excel VBA hast, kannst du folgende Alternativen in Betracht ziehen:

  • Direktes Formatieren: Anstatt die Zeilen zu selektieren, kannst du direkt die Formatierung oder Löschoperationen auf die gewünschten Zeilen anwenden, ohne sie vorher auszuwählen. Dies vermeidet die Probleme mit der vba string länge maximale.

  • Verwendung von Arrays: Du kannst die Zeilennummern in ein Array speichern und anschließend die gewünschten Operationen darauf ausführen.


Praktische Beispiele

Hier sind einige Beispiele, wie du das Makro anpassen kannst, um verschiedene Anforderungen zu erfüllen:

  1. Jede zweite Zeile formatieren:

    Sub FormatEverySecondRow()
       Dim lRow As Long
       Dim eingzeile As Integer
       eingzeile = 2 ' Jede zweite Zeile formatieren
       For lRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row
           If lRow Mod eingzeile = 0 Then
               Rows(lRow).Interior.Color = RGB(200, 200, 200) ' Beispiel: Farbe ändern
           End If
       Next lRow
    End Sub
  2. Daten aus dem Internet einfügen: Wenn du Daten aus dem Internet kopierst, stelle sicher, dass du nur die relevanten Zeilen formatierst oder löschst, um die Excel vba länge string nicht zu überschreiten.


Tipps für Profis

  • Vermeide Select: In den meisten Fällen kannst du Select vermeiden, um den Code effizienter und schneller zu gestalten. Arbeite direkt mit Objekten, um die Performance zu verbessern.

  • Verwende Union: Nutze die Union-Funktion, um mehrere Bereiche in einem Range-Objekt zu kombinieren, was die Handhabung großer Datenmengen erleichtert.

  • Debugging: Verwende Debug.Print für die Überwachung der Variablen, um die Länge des Strings während der Ausführung zu überprüfen.


FAQ: Häufige Fragen

1. Was ist die maximale Länge eines Strings in Excel VBA?
Die maximale Länge eines Strings in einer Range-Anweisung beträgt 255 Zeichen. Du kannst jedoch längere Strings in Variablen speichern und verarbeiten.

2. Wie kann ich die Länge eines Strings in VBA überprüfen?
Du kannst die Funktion Len verwenden, um die Länge eines Strings zu überprüfen, z.B. Debug.Print Len(sRows).

3. Wie kann ich mehrere Zeilen effizient formatieren?
Anstatt sie zu selektieren, kannst du ein Range-Objekt verwenden, um mehrere Zeilen auf einmal zu formatieren, was die Effizienz steigert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige