Supportnet / Forum / Tabellenkalkulation
VBA: Range mit vielen Zellen
Frage
Hallo,
ich habe das Problem, dass ich gerne Zellen nach einem bestimmten Kriterium auswählen möchte. Das klappt auch soweit ich schreibe alle Zellen in einen String und lege diesen String dann in das Range.
Sub test()
Dim Zelle As Range
Dim Suchbereich As Range
Dim Farbe As Variant
Dim ClrSel As String
Dim arr As Variant
Farbe = Range("a2").Interior.ColorIndex
Set Suchbereich = ActiveSheet.UsedRange
For Each Zelle In Suchbereich
If Zelle.Interior.ColorIndex = Farbe Then
ClrSel = ClrSel + "," + Zelle.Address
End If
Next
If Left(ClrSel, 1) = "," Then ClrSel = Mid(ClrSel, 2, Len(ClrSel) - 1)
Range(ClrSel).Select
End Sub
Das Problem ergibt sich meiner Meinung nach, wenn ich zuviele Zellen in dem String habe. Hier tritt der Fehler auf:
Laufzeitfehler 1004
Die Methode Range für das Objekt _Global ist fehlgeschlagen.
Hat man das lösen kann?
Grüße
Oli
Antwort 1 von rainberg
Hallo Oli,
ungetestet würde ich sagen, ersetze folgende Zeile
ClrSel = ClrSel + "," + Zelle.Address
durch diese
ClrSel = ClrSel & "," & Zelle.Address
den Textwerte kann man nicht addieren, sondern nur verketten.
Gruß
Rainer
ungetestet würde ich sagen, ersetze folgende Zeile
ClrSel = ClrSel + "," + Zelle.Address
durch diese
ClrSel = ClrSel & "," & Zelle.Address
den Textwerte kann man nicht addieren, sondern nur verketten.
Gruß
Rainer
Antwort 2 von Oli00
Hi Rainer,
bitte mal testen. Der Code funktioniert einwandfrei mit z.B. 10 Zellen. Wenn du allerdings das Ganze mit 300 Zellen machst wird der String zu lang und Range bringt das geschilderte Problem.
Hat leider sicher nichts mit Addition oder Verkettung zu tun.
Grüße
Oli
bitte mal testen. Der Code funktioniert einwandfrei mit z.B. 10 Zellen. Wenn du allerdings das Ganze mit 300 Zellen machst wird der String zu lang und Range bringt das geschilderte Problem.
Hat leider sicher nichts mit Addition oder Verkettung zu tun.
Grüße
Oli
Antwort 3 von Oli00
Hi,
genau das dachte ich mir auch. Hatte es zwar nicht selbst ausprobiert wieviele Zeichen es sind, aber es war klar das der Hase hier im Feld begraben liegt.
Viele Grüße
Oli
genau das dachte ich mir auch. Hatte es zwar nicht selbst ausprobiert wieviele Zeichen es sind, aber es war klar das der Hase hier im Feld begraben liegt.
Viele Grüße
Oli
Antwort 4 von rainberg
Hallo Oli,
ich habe den Code weder genauer analysiert noch getestet und habe auch nicht die Absicht dies zu tun, da ich keine Zeit habe eine entsprechende Tabelle nach zu bauen.
Mir fiel lediglich auf, dass die Textverkettung zumindest in meinen Augen mit den falschen Operatoren geschehen ist.
Wenn dies trotzdem läuft, dann ist es ja gut nur habe ich es auf diese Art noch nicht praktiziert.
Gruß
Rainer
ich habe den Code weder genauer analysiert noch getestet und habe auch nicht die Absicht dies zu tun, da ich keine Zeit habe eine entsprechende Tabelle nach zu bauen.
Mir fiel lediglich auf, dass die Textverkettung zumindest in meinen Augen mit den falschen Operatoren geschehen ist.
Wenn dies trotzdem läuft, dann ist es ja gut nur habe ich es auf diese Art noch nicht praktiziert.
Gruß
Rainer
Antwort 5 von Oli00
Sorry, wenn es wie ein Angriff rüber kam! Sollte es beim besten Willen nicht sein!
Danke auf jeden Fall für den Beitrag.
Grüße
Oli
PS: Die Tabelle kann man nachbauen indem man ein leeres Blatt nimmt und die erste Spalte rot einfärbt.
Danke auf jeden Fall für den Beitrag.
Grüße
Oli
PS: Die Tabelle kann man nachbauen indem man ein leeres Blatt nimmt und die erste Spalte rot einfärbt.
Antwort 6 von nighty
hi olli :-)
lege die daten in ein array
hier ein kleines beispiel der array darstellung
was zwar kein bezug zu deinem problem hat aber eben zum ueben bzw verstaendnis dient
Sub LesenSchreiben()
Dim ExceL()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Tabelle1
Set ws2 = Tabelle2
ExceL = ws1.Range("A1:B5")
ws2.Range("A1:B5") = ExceL()
End Sub
gruss nighty
lege die daten in ein array
hier ein kleines beispiel der array darstellung
was zwar kein bezug zu deinem problem hat aber eben zum ueben bzw verstaendnis dient
Sub LesenSchreiben()
Dim ExceL()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Tabelle1
Set ws2 = Tabelle2
ExceL = ws1.Range("A1:B5")
ws2.Range("A1:B5") = ExceL()
End Sub
gruss nighty
Antwort 7 von Oli00
Hi,
danke für die Antowort. Ich habe mal versucht das ganze umzusetzen, habs aber leider nicht hinbekommen. Wenn du nochmal Zeit hast kannst du ja mal sagen wie du dir das ganze gedacht hattest.
Viele Grüße
Oli
danke für die Antowort. Ich habe mal versucht das ganze umzusetzen, habs aber leider nicht hinbekommen. Wenn du nochmal Zeit hast kannst du ja mal sagen wie du dir das ganze gedacht hattest.
Viele Grüße
Oli
Antwort 8 von nighty
hi olli :-)
schick mir eine mustertabelle mit ausführlichen wünschen und eindeutigen betreff bei der email
oberley@t-online.de
gruss nighty
schick mir eine mustertabelle mit ausführlichen wünschen und eindeutigen betreff bei der email
oberley@t-online.de
gruss nighty