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

With With Verschachtelung

With With Verschachtelung
05.05.2016 14:16:11
Franz
Hallo Fachleute,
ich hab eine Frage an Euch: durch Zufall, weil ich was rumprobiert habe, hat sich ungewollt etwas ergeben, was ich bisher so nie gewagt habe zu schreiben:
es gibt einen With-Bereich mir Verweisen auf eine Tabelle; darin gibt es einen weiteren With-Bereich auf eine andere Tabelle, hier mal skizziert:
Sub skizze
With Tabelle 10
.cells(....
.cells(.....
With Tabelle1
.cells(......
.cells(.....
end with
.cells(....
.cells(.....
end with
End Sub

Die Verweise in der 2 With-Schleife beziehen sich alle auf Tabelle1.
Wie gesagt, das hab ich so nicht geplant, es hat sich beim Probieren ergeben. ABER: beim Testen scheint es keine Fehler zu geben, es scheint alles richtig zu laufen wie gewünscht, soweit ich es bisher überblicken kann.
Spricht irgendwas gegen diese Verschachtelung? Steckt irgendein Risiko drin, das ich noch nicht erkenne.........?
Grüße
Franz

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: With With Verschachtelung
05.05.2016 14:21:52
Arthur
Hallo Franz.
Excel betrachtet immer die letzte With-Referenz. Das Risiko ist den Überblick beim Entwickeln zu behalten.
Gruß, Arthur.

AW: With With Verschachtelung
05.05.2016 14:25:21
Franz
Hallo Arhtur,
das heißt also wenn ich
With Tabelle1 mit end with
beende, kehrt Excel zwangsläufig zu With Tabelle10 zurück und macht also richtig weiter. Aber klar, aufpassen beim Verschachteln.
Danke und Grüße
Franz

AW: With With Verschachtelung
05.05.2016 16:41:26
Piet
Hallo Franz W.
Völlig korrekt. Die 2. With Anweisung war in sich selbst abgeschlossen.
Es gibt aber noch weitere Verschachtelungsmöglichkeiten: - s. unten einige Beispiele
Das geht auch mit Blatt Objekten, z.B. um CheckBoxes oder OptionButton auszuwerten.
Ebenso mit Font für Schrift Einstellungen, Interior, oder Border um Rahmen zu ziehen.
Man muss beim Verschachteln nur aufpassen das man dabei nicht "stolpert"!
mfg Piet
Sub skizze
With Tabelle 10
.cells(....
.cells(.....
With .CheckBoxes(1)
If .Value = 1 then
(Aktion starten)
end If
end with
With .Range("C10")
.cells(1,2) = Text1
.cells(2,2) = Text2
end with
With .Range("C10").Font
.ColorIndex = 3
.Bold = True
end with
With .Range("C10").Interior
.ColorIndex = 23
end with
end with
End Sub

Anzeige
AW: With With Verschachtelung
05.05.2016 17:44:45
Franz
Hallo Piet,
vielen Dank! Eigentlich sofort einleuchtend :-)). Aber darauf bin ich auch noch nicht gekommen. Aber da fällt mir gleich einiges ein .........
Danke und Grüße
Franz

AW: With With Verschachtelung
05.05.2016 18:23:57
Piet
Vielen Dank an Franz
praktische Erfahrung aus 20 Jahren Excel und vielen Beispielen auf 3,5 Zoll Disk und CD
Es erleichtert manche Programmierarbeiten ungemein. Man darf nur nicht "stolpern"
mfg Piet

und hab auch noch gelernt,
05.05.2016 23:13:42
Franz
dass es eine Alternative zu Offset() gibt:
.Range("C10").cells(1,2) = ...
ist mir auch neu.
Grüße
Franz

AW: und hab auch noch gelernt,
06.05.2016 01:19:54
Piet
Hallo Franz,
eine interessante Variante ist auch Resize(z,s) = (Zeile, Spalte)
Es veraendert den Rang Bereich um den Wert Z/S
.Range("C10").Resize(1 ,2).Copy
.Range("C10").Resize(2 ,1).Copy
.Range("C10").Resize(3 ,2).Copy
Bei Cells statt Offset gibt es noch eine wichtige Besonderheit, probiere es mal aus.
.Range("C10:D14").Offset(0,3).Copy
.Range("C10:D14").Cells(1, 4).Copy - Hier verursacht Cells einen Fehler !!!
Erkennst du den Unterschied? - Da bin ich Anfangs selbst böse reingefallen.
Es macht aber Spass sich mitVBA zu beschaeftigen.
mfg Piet
anbei noch ein kleines ;Adressen Test Programm das ich selbst verwende.
Man kann damit sehr schnell eigene Range Adressen Fehler erkennen.
Und ein Beispiel für Blockweises Adressieren über sp*2 / ze*4
'Adressen Test Modul per MsgBox
'Adressen Test Modul per MsgBox
Const ClrList = "A2:B20"
Const SortBer = "A2:D20"
Const CopyBer = "F12:H30"
Const tBer = "C4:D7"
Sub Adressen_Test()
Dim mTxt As String, ok As Variant
Sheets("Tabelle1").Select
mTxt = "Lösche Liste"
Range(ClrList).Select:   GoSub mTxt
mTxt = "Sortier Bereich"
Range(SortBer).Select:   GoSub mTxt
mTxt = "Kopier Bereich"
Range(CopyBer).Select:   GoSub mTxt
[a1].Select:  Exit Sub
mTxt:  Adr = Selection.Address(False, False)
ok = MsgBox(mTxt & "  " & Adr, 1, "Adressen-Test:")
If ok = vbOK Then Return
End Sub
'Adressen Test für Blockweises ausfüllen
Sub Adressen_Test_2()
Dim sp, ze, s, z, j
For ze = 1 To 3
For sp = 1 To 4
'Spalten + Zeilen Offset setzen
s = (sp - 1) * 2
z = (ze - 1) * 4
'Schkeife für 12 Einzel-Blöcke ausfüllen
Range(tBer).Offset(z, s).Select
MsgBox Selection.Address
For Each j In Range(tBer).Offset(0, s)
Next j
Next sp
Next ze
End Sub

Anzeige
AW: und hab auch noch gelernt,
06.05.2016 09:06:42
Franz
Hallo Piet,
ja, danke, klingt interessant, grad die die beiden Testprogramme, hab sie schon mal schnell laufen lassen. Allerdings zum genauer Anschauen komm ich erst nächste Woche wieder.
Beste Grüße
Franz

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige