Excel vba: Doofe Frage zu with Function

Hi,
Kann ich innerhalb einer with funktion auch Code verwenden? oder kann ich nur die unterpunkte zuweisen.
Also kann ich zum beispiel folgendes machen:

Option Explicit
sub nutzlos()
dim i as integer
dim intA as integer
dim wks1 As Worksheet, wks2 as worksheet
set wks1 = Worksheets("mappe1")
set wks2 = Worksheets("mappe2")
intA = 42
with wks1
 if .cells(1.1).value = intA then
 for i = 1 to 100
 .Cells(1,i).value= intA
 next i 
 end if 
end with
end sub

oder muss ich das with in die schleife tun.

 For i = 1 To 5
 With wks2.Cells(intA, i)
 .Interior.ColorIndex = 6
 .Interior.Pattern = xlSolid
 .Font.Bold = True
 End With
 Next i

Ja ich weiß, dass oben keinen Sinn macht, das with zu verwenden, aber mir gehts um prinzip.

hallo

with ist keine funktion sondern ein hilfskonstrukt um sich tipparbeit zu sparen. innerhalb eines with-blocks musst du also die objektreferenz, zu der du das with definierst, nicht mehr angeben. ansonsten kannst du in diesem block beliebigen code ausführen.

lg
erwin

Hallo Erwin,
Danke für deine Schnelle Rückmeldung.
Danke
Grüße
Winter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Winter,

Kann ich innerhalb einer with funktion auch Code verwenden?
oder kann ich nur die unterpunkte zuweisen.

du kannst beliebigen Code benutzen, nur müßen For-Next, While-Wend usw. Blöcke „geschlossen“ sein. Aus diesem Grund funktioniert Variante A: nicht.
Prinzipiell wäre Variante B: oder C: egal, aber Variante B: ist schneller, weil in Variante C: 9mal mehr die With-Anweisung und das .Activate und das End With ausgeführt wird.

A:
With Worksheets(1)
 For N = 1 To 10
 ...Code
 End With
Next N

B:
With Worksheets(1)
 ...Code
 .Activate
 For N = 1 To 10
 ...Code
 Next N
 ...Code
End With

C:
For N = 1 To 10
 ...Code
 With Worksheets(1)
 .Activate
 ...Code
 End With
 ...Code
Next N

In deinem Beisiel:

For i = 1 To 5
With wks2.Cells(intA, i)
.Interior.ColorIndex = 6
.Interior.Pattern = xlSolid
.Font.Bold = True
End With
Next i

MUß das With in die For-Schleife, da du dich ja auf Zellen beziehen willst die durch das wechselnde i bestimmt werden.
Natürlich kannst du das With auch hier außerhalb der For-Schleife schreiben, nur dann kannst du die Schleife auch weglassen da die Schleife dann 5mal das Gleiche mit einer Zelle macht.
Naja, wenn i den Wert 0 hat kracht der Code sowieso :smile:

Und, nicht getestet, nur gelesen, D: soll schneller sein als E:

D:
Set wks=worksheets(1)
with wks
…Code
End With

E:
with worksheets(1)
…Code
End With

Gruß
Reinhard