Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: End With ohne With (Fehlermeldung) ?

End With ohne With (Fehlermeldung) ?
07.12.2006 08:36:55
Peter
Guten Tag
Bei nachstehendem Code kommt die Fehlermeldung:
Fehler beim Kompilieren: "End With ohne With"
Das verstehe ich nicht, denn ganz am Anfang steht "with sheets ("GLOBAL")
und am Schluss vor "End Sub " steht "End With"
Kann mir jemand sagen, wo das Problem liegt?
Danke, Peter
‘…… = steht für weitere analoge Einträge

Sub Bericht_erstellen()
Dim Det_Zeilen As Long
Dim BW_Diff As Long
Dim Legende As Long
Dim zNr As Long
With Sheets("GLOBAL")
.Range("Q:AD").Delete
Rows(1).Insert
.Range(Cells(1, 1), Cells(1, 20)).Borders (xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
.Cells(1, 1) = "VALUTA"
.Cells(1, 20) = "%_VON_VOLUMEN"
.Range(Cells(1, 1), Cells(1, 20)).Font.Bold = True 'Spalte A-T fett
.Cells(1, 1).EntireRow.Font.Bold = True           'ganze Zeile 1 fett
Det_Zeilen = .Cells(65536, 1).End(xlUp).Row
Det_Zeilen = Det_Zeilen + 1
.Cells(Det_Zeilen, 4) = "COBCVCHF"
.Cells(Det_Zeilen, 14) = "0"
Det_Zeilen = Det_Zeilen + 1
.Cells(Det_Zeilen, 4) = "COBCVCHF"
.Cells(Det_Zeilen, 14) = "0"
Det_Zeilen = Det_Zeilen + 1
.Cells(Det_Zeilen, 4) = "COBCVCHF"
.Cells(Det_Zeilen, 14) = "0"
Det_Zeilen = Det_Zeilen + 1
.Cells(Det_Zeilen, 4) = "COBCVCHF"
.Cells(Det_Zeilen, 14) = "0"
Det_Zeilen = Det_Zeilen + 1
.Cells(Det_Zeilen, 4) = "COBCVCHF"
.Cells(Det_Zeilen, 14) = "0"
Det_Zeilen = Det_Zeilen + 1
.Cells(Det_Zeilen, 4) = "COBCVCHF"
.Cells(Det_Zeilen, 14) = "0"
BW_Diff = Det_Zeilen + 1
.Cells(BW_Diff, 6) = "Bewertungsdifferenz"
.Cells(BW_Diff, 9) = "CHF"
.Cells(BW_Diff + 1, 14).Formula = "=SUM(" & .Range(.Cells(2, 14), .Cells(BW_Diff, 14)).Address & ")"
zNr = 2
Do While zNr <= BW_Diff + 1
.Cells(zNr, 5).NumberFormat = "@"
.Cells(zNr, 5) = Right("000000000" & Cells(zNr, 5), 9)
zNr = zNr + 1
Loop
zNr = 2
Do While zNr <= BW_Diff
If Cells(zNr, 8) <> "" Then
.Cells(zNr, 8) = WorksheetFunction.VLookup(.Cells(zNr, 8), Range("Land_2_3"), 2, 0)
Else
End If
zNr = zNr + 1
.Range(Cells(1, 1), Cells(BW_Diff + 1, 20)).Borders (xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
Legende = BW_Diff + 3
.Range(.Cells(Legende, 1), .Cells(Legende + 19, 3)) _
.BorderAround LineStyle:=xlSolid, Weight:=xlMedium
.Range(.Cells(Legende, 1), .Cells(Legende + 19, 14)) _
.BorderAround LineStyle:=xlSolid, Weight:=xlMedium
End With
End Sub

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: End With ohne With (Fehlermeldung) ?
07.12.2006 08:41:23
Oberschlumpf
Hi Peter
Guckst du hier:

Do While zNr <= BW_Diff
If Cells(zNr, 8) <> "" Then
.Cells(zNr, 8) = WorksheetFunction.VLookup(.Cells(zNr, 8), Range("Land_2_3"), 2, 0)
Else
End If
zNr = zNr + 1
.Range(Cells(1, 1), Cells(BW_Diff + 1, 20)).Borders (xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
Legende = BW_Diff + 3
.Range(.Cells(Legende, 1), .Cells(Legende + 19, 3)) _
.BorderAround LineStyle:=xlSolid, Weight:=xlMedium
.Range(.Cells(Legende, 1), .Cells(Legende + 19, 14)) _
.BorderAround LineStyle:=xlSolid, Weight:=xlMedium
End With
End Sub

Du hast an der richtigen Stelle das Loop vergessen, welches die Do-Schleife schließt.
Konnte ich helfen?
Ciao
Thorsten
Anzeige
AW: End With ohne With (Fehlermeldung) ?
07.12.2006 08:57:20
Peter
Hallo zusammen
Das wars!
Vielen Dank.
Peter
Es fehlt ein WEND
07.12.2006 08:42:18
NoNet
Hallo Peter,
relativ weit am Ende des Codes öffnest Du eine "Do While" Schleife (Do While zNr <= BW_Diff), aber Du schliesst diese nicht mit "WEND" - daher diese FM.
Liebe Grüße,
NoNet
eher ein LOOP oT
07.12.2006 08:55:47
Rudi
Anzeige
Du hast Recht ! - Er schrieb ja "Do While" ...
07.12.2006 08:56:47
NoNet
...und nicht nur "While" - dann hätte WEND gepasst ;-)
Liebe Grüße,
NoNet
;
Anzeige
Anzeige

Infobox / Tutorial

Fehlerbehebung: "End With ohne With" in VBA


Schritt-für-Schritt-Anleitung

  1. Code überprüfen: Stelle sicher, dass der With-Block korrekt geöffnet und geschlossen wird. In deinem Fall beginnt der Block mit With Sheets("GLOBAL") und sollte mit End With enden.

  2. Schleifen überprüfen: Achte darauf, dass jede Do While-Schleife mit Loop und jede If-Bedingung mit End If geschlossen wird. In deinem Beispiel fehlt das Loop nach der Do While-Schleife.

  3. Korrektur des Codes: Der korrigierte Codeausschnitt könnte wie folgt aussehen:

    Do While zNr <= BW_Diff
       If Cells(zNr, 8) <> "" Then
           .Cells(zNr, 8) = WorksheetFunction.VLookup(.Cells(zNr, 8), Range("Land_2_3"), 2, 0)
       End If
       zNr = zNr + 1
    Loop
  4. Fehler testen: Führe den Code erneut aus, um sicherzustellen, dass die Fehlermeldung "Fehler beim Kompilieren: End With ohne With" behoben ist.


Häufige Fehler und Lösungen

  • Problem: "End With ohne With" Fehlermeldung.

    • Lösung: Überprüfe, ob der With-Block korrekt geschlossen wurde.
  • Problem: "End Sub erwartet" Fehlermeldung.

    • Lösung: Stelle sicher, dass jede Sub mit End Sub abgeschlossen ist und alle Blöcke korrekt strukturiert sind.
  • Problem: Fehlende Loop oder Wend-Anweisungen.

    • Lösung: Achte darauf, dass jeder Do While mit Loop und jede For-Schleife mit Next abgeschlossen wird.

Alternative Methoden

Falls du weiterhin Probleme mit dem End With-Block hast, kannst du auch folgende Alternativen in Betracht ziehen:

  • Verwende Variablen: Statt den With-Block zu verwenden, kannst du die Objekte direkt in Variablen speichern und diese verwenden. Zum Beispiel:

    Dim ws As Worksheet
    Set ws = Sheets("GLOBAL")
    ws.Range("Q:AD").Delete
  • Vermeide verschachtelte Blöcke: Halte deinen Code einfach und vermeide komplexe, verschachtelte If- und Do-Strukturen.


Praktische Beispiele

Hier ist ein einfaches Beispiel zur Veranschaulichung der Nutzung von With in VBA:

Sub FormatSheet()
    With Sheets("Sheet1")
        .Range("A1").Value = "Beispiel"
        .Range("A1").Font.Bold = True
        .Range("A1").Interior.Color = RGB(255, 255, 0)
    End With
End Sub

Achte darauf, dass du den With-Block korrekt verwendest, um die Lesbarkeit und Wartbarkeit deines Codes zu verbessern.


Tipps für Profis

  • Nutze Codekommentare: Verwende Kommentare im Code, um zukünftige Fehler zu vermeiden und den Überblick zu behalten.

  • Vermeide magische Zahlen: Statt Cells(65536, 1) zu verwenden, nutze Rows.Count für mehr Flexibilität in verschiedenen Excel-Versionen.

  • Codeabschnitte modularisieren: Teile deinen Code in kleinere Funktionen oder Subroutinen auf, um die Übersichtlichkeit zu erhöhen und die Fehlersuche zu erleichtern.


FAQ: Häufige Fragen

1. Was bedeutet die Fehlermeldung "End With ohne With"? Diese Fehlermeldung tritt auf, wenn ein With-Block nicht ordnungsgemäß geschlossen wurde oder wenn kein entsprechender With-Block für ein End With vorhanden ist.

2. Wie kann ich die End Sub erwartet-Fehlermeldung beheben? Stelle sicher, dass jede Subroutine mit End Sub abgeschlossen ist und alle Blöcke richtig strukturiert sind.

3. Gibt es eine einfachere Methode, um mit Objekten in VBA zu arbeiten? Ja, du kannst Objekte in Variablen speichern, um die Lesbarkeit zu verbessern und Fehler zu vermeiden, die durch lange Verkettungen entstehen können.

4. Was mache ich, wenn ich immer noch Probleme habe? Überprüfe deinen Code zeilenweise auf fehlende Anweisungen und teste jeden Block unabhängig, um die Fehlerquelle zu identifizieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige