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

kurze Verständnisfrage

kurze Verständnisfrage
28.07.2015 08:11:41
TerPursche
Hallo zusammen!
Mir konnte schon oft geholfen werden, deswegen komme ich auch mit dieser ich denke vergleichsweise einfachen Frage zu euch. Ich hab schon gesucht, aber nicht direkt was zufriedenstellendes gefunden, also seid mir bitte nicht böse, wenn das irgendwo offensichtlich stehen sollte ;)
Ich habe im Internet etwas gefunden, was auf meine Bedürfnise gepasst hat, und ich habe es genutzt ohne es groß nachzuvollziehen. Hab mir das dann nochmal angeschaut und jetzt habe ich dazu eine Frage. Hier der Code:
Set CellRange = Range("Q7:Q190")
For Each Cell In CellRange
Cell.Offset(0, -16).Range("A1:AA1").Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Next
Steht dort umgangssprachlich durch die Zeile
Cell.Offset(0, -16).Range("A1:AA1").Select
nicht etwas wie "Range.Offset.Range"? Macht das Sinn? Oder ist Cell kein Range-Ausdruck?
Kann mir wer nur diese Zeile erklären und welcher Ausdruck in dieser Zeile was bedeutet?
So wie ich es verstehe wird von einer Zelle (Range-Objekt) eine Offsetzelle gewählt. Und von dieser ausgehend eine Range? Wenn wer für sowas Seiten zum nachschlagen hat, bitte schickt sie mir, ich habe für das spezifische Beispiel halt echt nichts gefunden oder vielleicht auch falsch gesucht.
Auf jeden Fall schonmal Danke fürs lesen und einen guten Start in den Tag!
Gruß,
Jan

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: kurze Verständnisfrage
28.07.2015 08:45:23
EtoPHG
Hallo Jan,
IMHO macht diese Zeile keinen Sinn, sondern führt zu einem Fehler!
Das Objekt Cell ist eine Range und referenziert genau eine Zelle innerhalb des Bereichs Q7:Q190
Die Eigenschaft .Offset(,-16) referenziert nun die Zelle in Spalte A in der gleichen Zeile wie das Cell-Objekt.
Hier nochmals ein .Range("...") Objekt anzuhängen ist sinnfrei (bzw. unverständlich, fehlerhaft, blödsinnig...) und
.Select ist sowieso eine zu 99.9% besser nicht anzuwendende Methode in VBA Code. Siehe dazu: ->Wer selektiert denn da...
Wenn man den ganzen Code sähe und die Beschreibung, was er beabsichtigt, könnte man besser erklären, wie er am effizientesten auszusehen hätte.
Gruess Hansueli

Anzeige
AW: kurze Verständnisfrage
28.07.2015 09:24:48
TerPursche
Hallo Hansueli,
Vielen Dank für deine Antwort! Ich bin wohl nicht der einzige, dem das dann merkwürdig vorkommt. Tatsächlich funktioniert dieser Code jedoch und mein Auszug ist quasi die komplette Sub. Hab nur das Sub Name und screenupdating weggelassen meine ich. Habe aber auch grade keinen Zugriff mehr auf das Makro.

AW: kurze Verständnisfrage
28.07.2015 09:39:35
EtoPHG
Hallo Jan,
Ja hast recht, das Codeschnipsel funktioniert, solange es in einem Klassenmodul eines Worksheets steht. Hingegeben würde es in einem allg. Modul mit einem Fehler scheitern.
Es ist aber ein völlig unsinniges und nicht effizientes Codekonstrukt, siehe dazu meine Antwort weiter unten!
Gruess Hansueli

Anzeige
AW: kurze Verständnisfrage
28.07.2015 09:44:28
TerPursche
Hallo Hansueli,
sicher hast du Recht. Weder effektiv, noch sonderlich verständlich. Mir ging es auch darum, dass ich aufgrund dieses Codeschnipsels etwas in ein neues Makro schreiben wollte. Meine Fragestellung war demnach "Wie steuere ich von einer variablen Zelle aus einen bestimmten Bereich an?" Dann kam mir der Codeschnipsel in den Sinn und als ich mir den dann genauer angesehen habe kam meine Verständnisfrage ;)
Ich möchte sowas halt auch verstehen, damit ich was lerne hoffentlich irgendwann etwas eigenständiger bin, was vba angeht. Soviel zum Hintergrund.
Auch dir nochmal vielen Dank!
Gruß

Anzeige
Range("A" & cell.row & "AA" & cell.row)
28.07.2015 08:47:28
MCO
Moin,
ja, du hast recht: Zelle Offset 16 nach links, dann aber nicht Zelle sondern Bereich anwählen.
günstiger wäre Range("A" & cell.row & "AA" & cell.row)
Gruß, MCO

AW: Range("A" & cell.row & "AA" & cell.row)
28.07.2015 09:18:56
TerPursche
Kann grade leider nicht testen. Dein Vorschlag klingt sinniger, aber müsste es nicht heißen
Range("A" & cell.row & ":AA" & cell.row)
damit da auch ein ":" vorkommt?
Gruß und vielen Dank für deine Antwort!

AW: Range("A" & cell.row & "AA" & cell.row)
28.07.2015 09:29:39
Daniel
Hi
ja müsste es, für die Range muss man halt einen korrekten Adressstring bereitstellen.
Aber hier gehts ja eher um Prinzip.
allerdings ist
Range("A" & Cell.Row & ":AA" & cell.Row) nicht ganz gleiche wie Cell.Offset(0, -16).Range("A1:AA1"), weil ersteres absolut auf die die Spalten A:AA verweist, während zweiters relativ ist.
dh änderst du im Offest das -16 in -15, so verweist ersteres weiterhin auf A:AA, während das zweite dann auf B:AB verweist und somit das cell.Offset(0, -16).Resize(, 27) besser dem gezeigten Code entspricht.
Gruß Daniel

Anzeige
AW: Range("A" & cell.row & "AA" & cell.row)
28.07.2015 09:34:33
TerPursche
Hallo Daniel,
auch dir erstmal vielen Dank für deine Hilfsbereitschaft!
Auf das gleiche Problem bin ich gerade bei der Umsetzung auch gestoßen. Eins meiner Makros durchläuft eine Tabelle erst Zeilen, dann Spaltenweise, weswegen bei der Adressierung sowohl Spalten als auch Zeilen variabel bleiben müssten. Ich werde wohl deinen Weg ausprobieren, nochmals Danke dafür.
Noch einen schönen Tag wünsche ich!

AW: Range("A" & cell.row & "AA" & cell.row)
28.07.2015 10:35:01
Daniel
Hi
kommt darauf an, im Prinzip gibts ja drei möglichkeiten:
a) Zeilen und Spalten des Zielbereichs sollen relativ zur Ausgangszelle cell sein
b) Zeilen relativ zur Ausgangszelle, Spalten aber absolut
c) Zeilen absolut, Spalten relativ zur Ausgangszelle
für die Fälle verwende ich dann folgendes
a) Cell.Offset(x, y).Resize(a, b)
b) Intersect(cell.Offset(x, 0).EntireRow, Range("A:Z"))
c) Intersect(cell.Offset(0, x).EntireColumn, range("1:100"))
Gruß Daniel

Anzeige
AW: Range("A" & cell.row & "AA" & cell.row)
28.07.2015 12:03:57
TerPursche
Und nochmals vielen Dank. Wie in einer anderen Antwort schon geschrieben ging es um Fall a), und da hast du mir super geholfen.
Gruß, Jan

AW: Range("A" & cell.row & "AA" & cell.row)
28.07.2015 09:34:52
EtoPHG
Hallo,
Nur macht das Ganze wenig Sinn, wenn man nur das Codeschnipsel betrachtet, denn da würde genügen:
With Range("A7:AA190").Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
und das Ganze redundante und überflüssige! Codegefrickel von For Each...Next würde wegfallen
Gruess Hansueli

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige