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

Fehler 13 bei Ausführen von Worksheet_Change

Forumthread: Fehler 13 bei Ausführen von Worksheet_Change

Fehler 13 bei Ausführen von Worksheet_Change
22.08.2025 17:43:28
Andreas
Hallo werte Forummitglieder!

Als blutiger Anfänger in VBA habe ich mich mit einigen Web Tipps daran getraut, in VBA vordefinierte Filter für eine recht umfangreiche Liste zu erstellen. Um zwischen den diversen Filtereinstellungen auszuwählen, arbeite ich mit der Funktion "Datenüberprüfung", die ihre gültigen Werte aus einer kleinen Liste bezieht. Die Zelle der Datenüberprüfung habe ich als Zielwert in der Funktion Worksheet_Change(ByVal Target As Range) hinterlegt. Wenn der Benutzer im Dropdown der Datenüberprüfung den Wert für den Filter ändert, dann werden über das jeweils hinterlegte Modul die entsprechenden Filter angewandt.
Das funktioniert im Arbeitsblatt soweit auch gut und ohne Fehler, allerdings bekomme ich beim Öffnen des Arbeitsblatts den Fehler 13 (Typen unverträglich). Klicke ich die Fehlermeldung weg, dann funktioniert die Filter dennoch wie gewünscht.

Als absoluter Laie von VBA stehe ich auf dem Schlauch, warum die Fehlermeldung beim Öffnen des Arbeitsblatts kommt, die Makros / Filter aber problemlos ausgeführt werden. Vielleicht wichtig; das Arbeitsblatt wird beim Starten über einen Query Aufruf immer mit Daten aus einer SharePoint Liste befüllt.
Hat jemand eine Idee, wo der Fehler liegen kann? Der Code an sich funktioniert ja für die gestellte Aufgabe.
Vielen Dank!

Grüße
Andreas

Hier ist der Code aus meinem Arbeitsblatt. Target.Value bezieht sich immer auf den String aus dem Dropdown der Datenüberprüfung, und über Call rufe ich das jeweilige Makro mit den entsprechenden Filtereinstellungen auf.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$B$1" Then
If Target.Value = "Delays DGS" Then
Call Delays_DGS
ElseIf Target.Value = "Delays AMK" Then
Call Delays_AMK
ElseIf Target.Value = "Delays DS" Then
Call Delays_DS
ElseIf Target.Value = "Delays JH" Then
Call Delays_JH
ElseIf Target.Value = "Delays KD" Then
Call Delays_KD
ElseIf Target.Value = "Reset" Then
Call See_All
End If
End If

End Sub

Die Makros schauen beispielhaft wie folgt aus:
Sub Delays_DGS()
'
' Delays_AMK Makro

ActiveSheet.ListObjects("Tabelle_query").Range.AutoFilter Field:=3, _
Criteria1:="Hub EU DGS"
ActiveSheet.ListObjects("Tabelle_query").Range.AutoFilter Field:=36, _
Criteria1:="=2", Operator:=xlOr, Criteria2:="=3"
ActiveSheet.ListObjects("Tabelle_query").Range.AutoFilter Field:=45, _
Criteria1:="=N/A", Operator:=xlOr, Criteria2:="=No"
Columns("A:A").Select
Selection.EntireColumn.Hidden = True
Columns("K:M").Select
Selection.EntireColumn.Hidden = True
Columns("O:U").Select
Selection.EntireColumn.Hidden = True
Columns("W:AC").Select
Selection.EntireColumn.Hidden = True
Columns("AG:AG").Select
Selection.EntireColumn.Hidden = True
Columns("AK:AR").Select
Selection.EntireColumn.Hidden = True
Columns("AT:AW").Select
Selection.EntireColumn.Hidden = True
ActiveWindow.ScrollColumn = 2
End Sub
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Fehler 13 bei Ausführen von Worksheet_Change
22.08.2025 18:04:15
daniel
Schwer zu sagen
Das wichtigste wäre erstmal festzustellen, in welcher Programmzeile der Fehler auftritt.

Klicke den Fehler beim nächsten mal nicht einfach weg, sondern gehe in den VBA -Editor, dann siehst du die Zeile (gelb markiert) und du kannst schauen, welche Zellen und Variablen verwendet werden und welche Werte diese haben. Das hilft beim Ermitteln der Fehlerursache.

Gruß Daniel
Anzeige
AW: Fehler 13 bei Ausführen von Worksheet_Change
29.08.2025 08:45:50
Andreas
Hallo Daniel,

Danke für den Hinweis!
Es wurde beim Fehler immer die erste Wenn-Bedingung (If Target.Address = "$B$1" Then) beim Ausführen des Change gelb markiert. Das Problem lag wie von Ulf vermutet in der automatischen Datenaktualisierung beim Öffnen des Tabellenblatts.

Viele Grüße
Andreas
Anzeige
AW: Fehler 13 bei Ausführen von Worksheet_Change
22.08.2025 21:35:15
Piet
Hallo

wie Daniel bereits schrieb, aus dem Code ist zunächst nicht ersichtlich warum ein Fehler auftritt.
Wird ausser Worksheet_Change noch ein 2. Makro Worksheet_Activate aufgerufen??
Bleibt die Frage, welche Code Zeile wird gelb markiert???

Auf Select kannst du verzichten, das verkürzt deinen Code auf jeden Fall!
Columns("A:A").EntireColumn.Hidden = True

mfg Piet
Anzeige
AW: Fehler 13 bei Ausführen von Worksheet_Change
23.08.2025 01:15:45
Ulf
Hi,
ich vermute, dass du Background-Aktivitäten in den Optionen von Excel aktiv hast, denn dann:
Wird beim Öffnen der Datei die Datenbasis aktualisiert und der Zugriff darauf verursacht den Fehler.
Solltest versuchen die Aktualisierung manuell per vba am Anfang im Workbook_Open oder als erstes im Makro zu erledigen und die Async-Option nutzen, bspw
ThisWorkbook.RefreshAll

Application.CalculateUntilAsyncQueriesDone

hth
Ulf
Anzeige
AW: Fehler 13 bei Ausführen von Worksheet_Change
23.08.2025 20:22:26
daniel
Hi

Eine mögliche Fehlerursachen wäre, dass beim Start zwar die Zelle B1 geändert wird , aber ein anderes Tabellenblatt das aktive Tabellenblatt ist und dann suchen deine Makros die Listobjekts im falschen Tabellenblatt.

Bau mal am Anfang des Change-Makros eine der beiden Befehlszeilen ein:
a) Makro wird nicht ausgeführt, wenn das falsche Blatt aktiv ist:
If me.name > ActiveSheet.Name then Exit Sub

b) das "richtige" tabellenblatt wird aktiviert:
Me.Select

"Me" ist innerhalb eines Tabellenblattmoduls (also da, wo die Eventmakros stehen) das Tabellenblatt des Moduls.

Sinnvollere wäre es, die Folgemakros umzuschreiben, dass sie auch in diesem Fall korrekt ausgeführt werden (aber mach zum testen erstmal eine der beiden Varianten)
Sub Delays_DGS()

'
' Delays_AMK Makro
With Sheets("Tabelle???")
.ListObjects("Tabelle_query").Range.AutoFilter Field:=3, Criteria1:="Hub EU DGS"
.ListObjects("Tabelle_query").Range.AutoFilter Field:=36, Criteria1:="=2", Operator:=xlOr, Criteria2:="=3"
.ListObjects("Tabelle_query").Range.AutoFilter Field:=45, Criteria1:="=N/A", Operator:=xlOr, Criteria2:="=No"
.Range("A:A,K:M,O:U,W:AC,AG:AG,AK:AR,AT:AW").EntireColumn.Hidden = True

ActiveWindow.ScrollColumn = 2
End With
End Sub


Hinweise: bei With musst du dass Tabellenblatt angeben, mit dem das in den nächsten Codezeile häufiger arbeiten willst (bitte den richtigen Namen einsetzen).
In der Folge wird dann immer dort, wo ein Ausdruck mit dem Punkt beginnt (.Listobjekts, .Range) dieses Tabellenblatt eingesetzt. Das gilt bis zum End With

Eine weiter Vereinfachung, welche du bei Recorder Aufzeichnungen immer machen solltest ist, dass du die Befehle direkt an die jeweiligen Objekte anhängst, ohne die Objekte selbst vorher zu selektieren. Der Recorder muss das so aufzeichnen, weil wir mit der Maus so arbeiten, aber notwendig im Makro ist das nicht
Der Code wird damit nicht nur kürzer und übersichtlicher, sondern auch schneller in der Ausführung.

Und letzter Tipp: du kannst auch mehrere, nicht zusammhängende Spalten gleichzeitig ausblenden, dann die Teilbereiche mit Komma getrennt in der Adresse angeben (oder beim Aufzeichnen gleich die Bereiche mit STRG markieren)

Gruß Daniel
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige