Anwendungsfehler mit ThisWorkbook.Worksheets beheben
Schritt-für-Schritt-Anleitung
-
Öffne das VBA-Editor-Fenster: Drücke ALT + F11 in Excel.
-
Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (deinWorkbookName)", wähle "Einfügen" und dann "Modul".
-
Kopiere den folgenden Code in das Modul:
Sub Journal_kopieren()
Dim rngBereich As Range
ThisWorkbook.Worksheets("Original-Journal").Cells.Copy _
Destination:=ThisWorkbook.Worksheets("Journal-zum-bearbeiten").Range("A1")
Set rngBereich = Application.Union(ThisWorkbook.Worksheets("Original-Journal").Range("ySoll"), _
ThisWorkbook.Worksheets("Original-Journal").Range("yHaben"))
With rngBereich
.FormatConditions.Delete
.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=RUNDEN(SUMME(ySoll)+SUMME(yHaben);1)=0"
End With
End Sub
-
Führe das Makro aus: Drücke F5 oder gehe zu "Ausführen" und wähle "Sub/UserForm ausführen".
-
Überprüfe die bedingte Formatierung: Stelle sicher, dass die Bereiche "ySoll" und "yHaben" korrekt definiert sind.
Häufige Fehler und Lösungen
-
Fehler: "Anwendungsfehler": Dieser Fehler tritt häufig auf, wenn der Bereich nicht korrekt referenziert wurde. Achte darauf, dass die Namen der Bereiche ("ySoll" und "yHaben") in der Arbeitsmappe korrekt sind.
-
Lösung: Stelle sicher, dass du ThisWorkbook.Worksheets("Original-Journal").Range("ySoll") verwendest, um sicherzustellen, dass du auf den richtigen Arbeitsblattbereich zugreifst.
-
Fehler: Ungültige Formatierung: Wenn die Formatierung nicht wie gewünscht funktioniert, stelle sicher, dass du .FormatConditions.Delete vor dem Hinzufügen neuer Bedingungen verwendest.
Alternative Methoden
-
Verwendung von ActiveWorkbook: Wenn du mit verschiedenen Arbeitsmappen arbeitest, kann es sinnvoll sein, ActiveWorkbook anstelle von ThisWorkbook zu verwenden. So kannst du beispielsweise:
Set rngBereich = Application.Union(ActiveWorkbook.Worksheets("Original-Journal").Range("ySoll"), _
ActiveWorkbook.Worksheets("Original-Journal").Range("yHaben"))
-
Direkte Referenzierung: Du kannst auch die Referenzierung auf ThisWorkbook.Worksheets(1) verwenden, um auf das erste Arbeitsblatt zuzugreifen.
Praktische Beispiele
Hier ein Beispiel, wie du die bedingte Formatierung für einen Bereich anwendest:
Sub Beispiel_Formatierung()
Dim rngBereich As Range
Set rngBereich = ThisWorkbook.Worksheets("Original-Journal").Range("A1:A10")
With rngBereich
.FormatConditions.Delete
.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="=100"
.FormatConditions(1).Interior.Color = RGB(255, 0, 0) ' Rot
End With
End Sub
In diesem Beispiel wird der Bereich A1:A10 auf Werte größer als 100 formatiert.
Tipps für Profis
-
Verwende Fehlerbehandlung: Integriere Fehlerbehandlungsroutinen, um Anwendungsfehler abzufangen. Beispiel:
On Error GoTo Fehlerbehandlung
' Dein Code hier
Exit Sub
Fehlerbehandlung:
MsgBox "Fehler: " & Err.Description
-
Verwende Debug.Print: Nutze Debug.Print in deinem Code, um Informationen zur Laufzeit im Direktfenster anzuzeigen. So kannst du leichter Fehler finden und beheben.
FAQ: Häufige Fragen
1. Was ist der Unterschied zwischen ThisWorkbook und ActiveWorkbook?
ThisWorkbook bezieht sich auf die Arbeitsmappe, in der der Code ausgeführt wird, während ActiveWorkbook die aktuell aktive Arbeitsmappe darstellt.
2. Wie kann ich die bedingte Formatierung entfernen?
Verwende .FormatConditions.Delete, um alle bestehenden Formatierungen für einen Bereich zu entfernen, bevor du neue hinzufügst.