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

Unterschiedliche Bereiche

Unterschiedliche Bereiche
07.06.2018 23:13:50
Barbaraa
Hallo
würde gerne den Unterschied bestimmter Bereiche erkennen.
Im folgenden Beispiel werden drei Bereiche gebildet:
Sub Test()
Detail Range("B2:E10")
Detail Range("B2:E10").Rows(3)
Detail Range("B2:E10").Rows(3).Cells
End Sub

Sub Detail(rBereich As Range)
rBereich(1).Select
rBereich(2).Select
rBereich(3).Select
rBereich(10).Select
rBereich.Select
End Sub
Beim schrittweise Durchlauf von Test sieht man, dieses Bereiche verhalten sich unterschiedlich.
Sicher, mir ist klar, rA unfasst einen ganzen Bereich als einzelne Zellen, rB ist eine Reihe, und rC ebensdo, aber als einzelne Zellen. Aber das weiß ich nur aus dem Verlauf des Skrips.
Wie kann man, ohne ihre Entstehung zu kennen, den Aufbau dieser Bereiche erkennen zum Beispiel nur aus der Sicht von Detail(rBereich As Range)?
Kann man das bei "Überwachungsausdrücke" oder im Lokal-Fenster sehen?
Habe in einer Vielzahl von VBA-Seiten gestöbert, aber keine Antwort auf meine Frage gefunden.
LG, Barbara

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Eine ziemlich theoretische Frage, ...
08.06.2018 00:02:24
Luc:-?
…Barbara,
die in der PgmmierPraxis kaum auftreten sollte, denn man weiß ja idR, so wie hier auch du, welcher Art der Bereich ist. Ansonsten hat ein Range als Objekt ja sowohl ein „Eltern“-Objekt (.Parent), das Blatt, als auch „Kind“-Objekte → Zellen, Zeilen und Spalten. Allerdings haben alle diese Kind-Objekte das gleiche Eltern-Objekt wie Range auch.
Folglich könnte man ihren Bezug einerseits, aber nur zT, über ihre Adresse, andererseits über ihre Zählung feststellen. Wenn man einen Range zählt, zählt man stets seine Zellen, anderenfalls müsste man angeben, was gezählt wdn soll. Übergibt man speziell eine einzelne Zeile oder Spalte, ist diese ein eigenes Objekt (ebenso wie eine einzelne Zelle) und wird als Ganzes gezählt. Fügt man nun wie bei Bsp C noch .Cells an, wdn ihre (und nur ihre!) Zellen gezählt.
So etwas zu unterscheiden ist besonders wichtig bei objekt-orientierten PgmZyklen wie For Each teilobjekt In gesamtobjekt, sonst könnte man Überraschungen erleben.
Wie anfangs gesagt, man sollte schon wissen, was man beabsichtigt und deshalb tut… ;-)
Morrn, Luc :-?
Anzeige
AW: Eine ziemlich theoretische Frage, ...
08.06.2018 18:02:14
Barbaraa
Etwas irreführend finde ich diese Hierarchie-Anschauung.
Obwohl Range("B2:E10").Rows(3) ein „Kind“-Objekt von Range("B2:E10") ist, müssen sie zugleich Geschwister sein, da sie beide ja Kinder der selben Eltern, der Tabelle, sind.
Zu Deinem Satz:
"So etwas zu unterscheiden ist besonders wichtig bei objekt-orientierten PgmZyklen wie For Each teilobjekt In gesamtobjekt, sonst könnte man Überraschungen erleben."
Ja, genau da habe ich meine Überraschungen erlebt. In einem Unterprogramm, wie "Detail" in meinem Beispiel, habe ich eine Row als Range übergeben und mich dann gewundert, warum es dann anders reagiert, als bei der Übergabe von Range("B2:E2"), obwohl die ja den selben Zellumfang haben.
Und damit ist das Thema keineswegs theoretisch und dennoch spannend.
Nun erkenne ich, dass mit .Count der Unterschied offensichtlich wird.
Und damit ist meine Frage beantwortet. Vielen Dank.
LG, Barbara
Anzeige
Bitte sehr, gern geschehen! ;-) owT
08.06.2018 18:51:23
Luc:-?
:-?
AW: Unterschiedliche Bereiche
08.06.2018 05:55:45
Hajo_Zi
Hallo Babara,
keine Ahnung was Du willst?
 Sub Detail(rBereich As Range)
MsgBox "Bereich " & rBereich.Address
MsgBox "Spalte " & rBereich.Columns.Count
MsgBox "Zeilen " & rBereich.Rows.Count
'     rBereich(1).Select
'     rBereich(2).Select
'     rBereich(3).Select
'     rBereich(10).Select
'     rBereich.Select
End Sub

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
AW: Unterschiedliche Bereiche
08.06.2018 07:52:08
Gerd
Moin,
im übrigen bringt es nichts, so über einen Zeilenbereich-Index zu gehen, wenn eine einzelne Zelle
bearbeitet werden soll.
Man kann dann gleich Bereich.Cells(x, y) schreiben.
Gruß Gerd
Anzeige
AW: Unterschiedliche Bereiche
08.06.2018 18:02:54
Barbaraa
Ja, Gerd, vielen Dank für Deinen Hinweis. Das ist auch mein derzeitiger Stand:
Die einzelne Zelle mit Bereich.Cells(x, y) ansprechen.
Allerdings wollte ich auf das y reduzieren und vom x wegkommen, sobald ich mich innerhalb einer Row befinde und formell keine andere zulassen wollte.
Dass der Code dann auch einfacher wird, sei dahingestellt. Bin eben am experimentieren.
LG, Barbara
AW: Unterschiedliche Bereiche
08.06.2018 23:03:30
Daniel
Hi
eine möglichkeit um zu erkennen, ob dir ein "normaler" zellbereich übergeben wurde oder eine Row/Column, wäre folgender Vergleich:
If rBereich.Count = rBereich.Cells.Count then
msgbox "normale Range"
else
msgbox "Column oder Row"
End if
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige