Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

With With Verschachtelung

Forumthread: 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

Anzeige

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

Anzeige
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

Anzeige
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
;
Anzeige

Infobox / Tutorial

Mit With-Verschachtelung in Excel arbeiten


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Neues Modul erstellen: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Code eingeben: Nutze die With-Anweisung, um den Code klarer und übersichtlicher zu gestalten. Hier ein einfaches Beispiel:

    Sub Beispiel()
       With Tabelle1
           .Cells(1, 1).Value = "Test"
           With .Range("A2")
               .Value = "Verschachtelung"
           End With
       End With
    End Sub
  4. Code ausführen: Um den Code auszuführen, gehe zurück zu Excel und drücke F5 im VBA-Editor.


Häufige Fehler und Lösungen

  • Problem: Excel bezieht sich nicht auf die richtige With-Referenz.

    • Lösung: Achte darauf, dass Du die End With-Anweisung korrekt platzierst. Wenn Du eine With-Anweisung verschachtelst, muss jede With-Anweisung mit ihrer eigenen End With-Anweisung enden.
  • Problem: Unübersichtlicher Code durch zu viele Verschachtelungen.

    • Lösung: Halte den Code so einfach wie möglich. Überlege, ob Du einige With-Anweisungen zusammenfassen kannst, um die Lesbarkeit zu erhöhen.

Alternative Methoden

Es gibt mehrere Möglichkeiten, um in Excel zu verschachteln. Eine interessante Methode ist die Verwendung von Resize anstelle von Offset, um Bereiche dynamisch anzupassen.

Beispiel:

With Tabelle1.Range("B1").Resize(3, 2)
    .Value = "Neuer Wert"
End With

Diese Methode ist besonders nützlich, wenn Du mit variablen Datenmengen arbeitest.


Praktische Beispiele

Beispiel 1: Verschachtelung mit CheckBoxes

Sub CheckBoxBeispiel()
    With Tabelle1
        With .CheckBoxes(1)
            If .Value = 1 Then
                .Caption = "Aktiv"
            End If
        End With
    End With
End Sub

Beispiel 2: Verwendung von Interior

With Tabelle1.Range("A1").Interior
    .ColorIndex = 6 ' Gelb
    .Pattern = xlSolid
End With

Tipps für Profis

  • Versuche, die With-Anweisungen so zu gestalten, dass Du mehrere Eigenschaften oder Methoden auf einmal ansprechen kannst, um den Code zu optimieren.
  • Achte darauf, nicht zu viele Verschachtelungen zu erzeugen, da dies den Code schwer verständlich machen kann. Halte den Überblick über Deine With-Referenzen, um Verwirrung zu vermeiden.
  • Verwende Kommentare, um den Zweck jeder With-Anweisung zu erklären, besonders wenn Du komplexe Programmierungen machst.

FAQ: Häufige Fragen

1. Was ist der Vorteil von With-Anweisungen? With-Anweisungen ermöglichen es Dir, den Code klarer und übersichtlicher zu gestalten, indem Du wiederholte Objektreferenzen vermeidest.

2. Kann ich mehrere With-Anweisungen ineinander verschachteln? Ja, es ist möglich, With-Anweisungen zu verschachteln. Achte jedoch darauf, die Kontrolle über die Referenzen zu behalten, um Fehler zu vermeiden.

3. Welche Excel-Versionen unterstützen die With-Anweisung? Die With-Anweisung ist in allen aktuellen Excel-Versionen verfügbar, einschließlich Excel 2010, 2013, 2016, 2019 und Microsoft 365.

4. Gibt es Risiken bei der Verwendung von verschachtelten With-Anweisungen? Das Hauptproblem besteht darin, den Überblick zu behalten. Zu viele Verschachtelungen können den Code unübersichtlich machen und zu Fehlern führen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige