Anzeige
Archiv - Navigation
1160to1164
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

Range Adressen übertragen

Range Adressen übertragen
Andreas
Hallo Herber Fans,
ein kleines Problemchen hält mich noch vom Nachtschlaf ab und bringt mich leider derzeit auch um den Verstand.
Also:
Ich ermittle auf einem Worksheet über eine Schleife einen Range. Ich möchte, daß ich diesen Range analog auf einem anderen Worksheet, welches nach der Schleife erstellt wird, zur Verfügung habe.
Was habe ich bisher gemacht.
Ursprungssheet:
1. Range in der Schleife ermittelt
2. strRangeAdresse = Range.Address
Auf dem TargetSheet
rgTarget = Range(strRangeAdresse)
Das funktionierte bisher auch tadellos. Aber nun habe ich den Range vergrößert. In dem Test, in dem es nicht mehr funktionierte war der Originalrange bei 92 Zellen. Nach dem Übertrag via Adressstring, kam ich nur noch auf 37. Ich habe ein Beispiel geschrieben in dem ich 100 Zellen im Originalrange habe, aber nur 43 übertragen werden.
https://www.herber.de/bbs/user/69859.xls
Wie kann ich einen Adressübertrag eleganter lösen?
Ich habe schon im Internet und Forum gesucht, aber nichts passendes gefunden. Mein Kopf ist derzeit auch blank. Ich bin für jede Idee und Anregung von außen dankbar! Schlaft gut.
Grüße aus Berlin, Andreas Hanisch
AW: Range Adressen übertragen
Gerd
Hallo Andreas!
With Workbooks.Add.Worksheets(1)
rgOriginal.Interior.ColorIndex = 44 'zurückgefärbt, der ja rot bleiben soll
Set rgTarget = .Range(rgOriginal.Address)
rgTarget.Interior.ColorIndex = 44
Debug.Print "rgTarget: "; rgTarget.Cells.Count
End With
Gruß Gerd
AW: Range Adressen übertragen
MichaV
Hei Gerd,
hast Du das getestet? Ich behaupte dass die .Address- Eigenschaft nicht mehr als 256 Zeichen enthalten kann.

If rgOriginal Is Nothing Then
Set rgOriginal = Selection
Else
Set rgOriginal = Union(rgOriginal, Selection)
End If
Selection.Value = Len(rgOriginal.Address)  '

Gruss und Gute Nacht- Micha
Anzeige
Was soll das Semikolon bei Debug.Print,...
Luc:-?
…Andreas & Gerd,
OOcalc meldet einen Syntaxfehler → das sollte auch unter xlVBA so sein, oder…?!
Gruß Luc :-?
AW: Was soll das Semikolon bei Debug.Print,...
Nepumuk
Hallo Luc,
das Semikolon bei Debug.Print entspricht dem & . Wenn du z.B. Beispiel nur Debub.Print "HALLO" "LUC" eingibst, setzt VBA automatisch ein Semikolon zwischen "HALLO" und "LUC".
Ergänzend: Ein Semikolon am Ende unterdrückt den Zeilenvorschub. Ein Komma zwischen zwei Werten erzeugt einen Tab-Sprung. Ein Komma am Ende erzeugt einen Tab-Sprung und unterdrückt den Zeilenvorschub.
Gruß
Nepumuk
AW: Was soll das Semikolon bei Debug.Print,...
MichaV
Hallo Nepumuk,
was sagst Du denn zum eigentlichen Problem? Stimmt meine Vermutung?
Gruss- Micha
Anzeige
AW: Was soll das Semikolon bei Debug.Print,...
Nepumuk
Hallo Micha,
du hast schon Recht, bei 255 Zeichen ist Schluss.
Gruß
Nepumuk
@Andreas: Reicht das als Anregung?
MichaV
Danke Nepumuk.
@Andreas: Reicht das als Anregung oder brauchst Du mehr Tips?
Gruss- Micha
AW: @Andreas: Reicht das als Anregung?
Andreas
Guten Morgen an die fleißigen Antworter,
so viele Forumsbenachrichtigungen erfreuen mich grad mehr, als der Sonnenschein in Berlin!
Vielen Dank für Eure Überlegungen und Anregungen. Die Haupterkenntnis für mich ist das Abriegeln bei der magischen 255er Marke. Das war auch schon meine Vermutung, aber es ist nicht die String Variable der limitierende Faktor (laut VBA Hilfe sind bedeutend (!) mehr Zeichen möglich), sondern die '.Address' Anweisung. Das bringt Klarheit.
Aber das Problem ist leider noch nicht gelöst.
Wie kann ich einen Range analog auf ein anderes Blatt übertragen?
Dank und Gruß, Andreas
Anzeige
AW: @Andreas: Reicht das als Anregung?
MichaV
Kann Dir heute Abend eine Lösung machen. Ansatz: Einzelne Adressen in einen String (kann bis 2GB lang sein), diesen dann mit Split in ein Array umwandeln, mit Hilfe dieses Arrays die Zellen im neuen Blatt wieder einzeln selektieren und zusammenfügen.
Gruss- Micha
AW: @Andreas: Reicht das als Anregung?
MichaV
noch offen
Wetter in Bergen: wiedermal regen.
AW: @Andreas: Reicht das als Anregung?
Andreas
Hi Micha,
Danke für Deine Initiative. Das ist schon mal ein gangbarer Weg. Da war ich bis dato nicht drauf gekommen. Aber spare Dir erstmal Deine kostbare Zeit. Ich habe gerade beim zweiten Kaffee noch eine Idee. In meinem konkreten Code, der das Range/Address/String Problem aufgeworfen hat, könnte ich eventuelle die Abfolge von Aktionen so ändern, daß die Adressermittlung noch auf dem Original Sheet erfolgt, die konkrete Range Setzung aber schon (in der Loop) auf dem Target Sheet. So kann ich Address Strings größer 255 Zeichen vermeiden.
Ich laß die Frage mal offen. Wenn Du immer noch magst und es schnell geht, dann freue ich mich natürlich von Dir zu hören.
Grüße Andreas
PS: Bergen, das Paris des Nordens?! Wow! Da war ich mal mit dem Rucksack. Es war eine wunderschöne Zeit.
Anzeige
Ich habe fertig :o)
MichaV
Fein. Daniel hat ja auch schon ne bessere Lösung vorgeschlagen.
Ja, Bergen im Norden. Wirklich schön hier. Wenn ich nur nicht den ganzen Tag lang arbeiten müsste :o)
Aha, dann haben die das im VBA-Adapter...
Luc:-?
…noch nicht berücksichtigt, ebensowenig wie auch 1zeilige If-Then-Else-Konstrukte (ohne End If) und manches andere, Nepumuk…
Danke, Gruß Luc :-?
AW: Aha, dann haben die das im VBA-Adapter...
MichaV
Ist halt nur OO. Für mich ist das wie chinesische Raubkopien. Vom Westen abschauen und dann versuchen billig (kostenfrei) nachzubauen. Nur dass die Chinesen es besser können.
Gibts denn inzwischen schon ne Webabfrage in OO?
Gruss - Micha
Weiß ich nicht,...
Luc:-?
…Micha,
habe auch nicht die neueste Version, aber evtl ist das ja die Zukunft. Die OS-Gemeinde ähnelt viel mehr einem Forum wie diesem hier als einer quasi „geschlossenen Anstalt“ wie MS. Außerdem ist das ja nur ein Adapter für eine offene Quelle (Syntax & Lexik), der einen PgmCode in einen anderen übersetzt. Insofern hinkt dein Vgl. Und was OO insgesamt betrifft, das ist mir in vielen Teilen zu ähnlich und in anderen zu unähnlich. Einen geschlosseneren Eindruck macht da bspw Gnumeric, aber das ist wie MS Works nichts für Pgmier-Freaks. Ansonsten sind sich die Office-Pgmm gleichen Zwecks ohnehin alle ähnlich, weil die meisten Befehle/Möglichkeiten schon Standard sind. Dem müssen sich alle anpassen, wenn sie ihr Produkt unters Volk bringen wollen (quasi softwaretechnische Evolution!). Vor 20 Jahren war das noch nicht so — da gab's sogar noch bei den grundlegendsten Tastenkombinationen Unterschiede zwischen den Anwendungen. Damals hat dann Lotus schließl die Standards im Office-Bereich gesetzt.
Gruß Luc :-?
Anzeige
AW: Range Adressen übertragen
Daniel
Hi
wie schon richtig erkannt wurde, der Flaschenhals ist die Definition der Range über einen String, da dieser String max 256 Zeichen lang sein darf.
daher muss man jeden Einzelbereich der Range auch einzeln übertragen:
Sub RangeÜbertragen()
With Workbooks.Add.Worksheets(1)
rgOriginal.Interior.ColorIndex = 44
Set rgTarget = .Range(rgOriginal.Areas(1).Address)
For i = 2 To rgOriginal.Areas.Count
Set rgTarget = Union(rgTarget, .Range(rgOriginal.Areas(i).Address))
Next
rgTarget.Interior.ColorIndex = 44
Debug.Print "rgTarget: "; rgTarget.Cells.Count
End With
End Sub
Gruß, Daniel
Anzeige
AW: Range Adressen übertragen
Andreas
Hallo Daniel,
so habe ich es nun umgesetzt und es läuft und ich kann beruhigt sein. Das war ja kein Zustand gestern Abend...
Auch noch einmal vielen Dank an alle anderen Antworter. In nicht einmal 24 Stunden ist ein Problem einfach so gelöst. Das ist genial! So kann es nun weiter vorangehen. Dieses Forum ist mit seinen sehr aktiven und fähigen Teilnehmern die absolute Referenz!!!
Nicht zu vergessen der angenehme und respektvolle Tonfall in dem hier kommuniziert wird.
Viele, viele Grüße aus Berlin, Andreas Hanisch

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige