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

Automatisierungsfehler

Forumthread: Automatisierungsfehler

Automatisierungsfehler
05.06.2019 09:44:36
Patrick
Liebe Community,
ich bekomme beim Ausführen meines Makros folgende Fehlermeldung:
Ungültige Vorreferenz oder Referenz zu unkompiliertem Typ.
Das Makro soll jedes File mit der Endung .xlsm öffnen und dann ein gewisses Prozedere durchführen.
Anbei der Code. Bei der fetten, kursiven Zeile bekomme ich die erwähnte Fehlermeldung.
WIsst ihr woran das liegen kann?
Danke im Voraus,
Patrick!

Sub Verdichtung_refresh()
Dim wb As Workbook
Dim strmyPath As String
Dim strmyDat As String
Dim ws As Worksheet
strmyPath = "C:Hier steht mein Pfad\"
strmyDat = Dir(strmyPath & "*.xlsm")
Application.ScreenUpdating = False
Application.DisplayAlerts = True
Do While strmyDat  ""
Set wb = Workbooks.Open(strmyPath & strmyDat)
For Each ws In ActiveWorkbook.Worksheets
If Left(ws.Name, 4) = "Inp." Then
ws.Select
ws.Cells(3, 3).Select
Selection.AutoFill Destination:=Range("C3:IR3"), Type:=xlFillDefault
ws.Range(ws.Cells(3, 3), ws.Cells(3, 252)).Select
Calculate
Selection.AutoFill Destination:=ws.Range(ws.Cells(3, 3), ws.Cells(6577, 252))
ws.Range(ws.Cells(3, 3), ws.Cells(6577, 252)).Select
Calculate
ws.Cells(4, 3).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Next ws
Worksheets("Output").Select
Cells(3, 5).Select
Selection.AutoFill Destination:=Range("E3:IT3"), Type:=xlFillDefault
Range(Cells(3, 5), Cells(3, 254)).Select
Calculate
Selection.AutoFill Destination:=Range(Cells(3, 5), Cells(6577, 254))
Range(Cells(3, 5), Cells(6577, 254)).Select
Calculate
Cells(4, 5).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
wb.Close SaveChanges:=True
strmyDat = Dir
Loop
' Application.DisplayAlerts = True
MsgBox "Done"
End Sub

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Automatisierungsfehler
05.06.2019 10:11:43
Rainer
Hallo Patrick,
Liegt es evtl. daran, dass du das Workbook nicht definiert hast, in welchem sich das Blatt "Output" befindet?
Gruß, Rainer
AW: Automatisierungsfehler
05.06.2019 10:37:59
Patrick
Hallo Rainer,
nein, ich habe es schon mit ActiveWorkbook und ThisWorkbook probiert - leider mit demselben Ergebnis
LG
Patrick
AW: Automatisierungsfehler
05.06.2019 10:57:41
Rainer
Hallo Patrick,
ich vermute ohne Beispieldatei bleibt es beim raten.
Ich rate dass es das Sheet "Output" nicht in jeder Datei gibt.
Gruß, Rainer
Anzeige
AW: Automatisierungsfehler
05.06.2019 11:21:37
Patrick
Hi Rainer,
der Fehler tritt auch dannn auf wenn ich nur die "for each ws" Schleife innerhalb eines Sheets laufen lasse. Und in dem aktiven Sheet gibt es definitiv ein "Output"-Sheet.
Ich versuche später noch eine Beispieldatei hochzuladen - mir fehlt momentan ein bisschen die Zeit.
Danke tdm schonmal für deine Hilfe.
LG
Patrick
Anzeige
AW: Automatisierungsfehler
05.06.2019 13:16:23
Rainer
Hallo Patrich,
ich bezweifle dass es im Sheet noch ein Sheet gibt, es sei denn es ist schwanger. Das ist aber vermutlich erst für Excel 2148 geplant.
Gruß, Rainer
;
Anzeige

Infobox / Tutorial

Automatisierungsfehler in Excel VBA beheben


Schritt-für-Schritt-Anleitung

  1. Überprüfen des Codes: Achte darauf, dass alle Objekte, wie Workbook, Worksheet oder Range, ordnungsgemäß deklariert und verwendet werden. In deinem Fall könnte die Zeile Worksheets("Output").Select den Fehler auslösen, wenn kein Arbeitsblatt mit diesem Namen vorhanden ist.

  2. Workbook-Referenz: Stelle sicher, dass das richtige Workbook ausgewählt ist. Verwende gegebenenfalls ThisWorkbook oder ActiveWorkbook, abhängig davon, welches Workbook du ansprechen möchtest.

  3. Fehlende Blätter prüfen: Der Fehler "ungültige Vorreferenz oder Referenz zu unkompiliertem Typ" kann auftreten, wenn das Blatt "Output" in einigen der geöffneten Dateien nicht existiert. Du kannst dies durch eine Überprüfung vor dem Zugriff auf das Blatt sicherstellen.

    If Not Evaluate("ISREF(Worksheets(""Output""))") Then
       MsgBox "Das Blatt 'Output' existiert nicht."
       Exit Sub
    End If
  4. Fehlerbehandlung einfügen: Füge eine Fehlerbehandlungsroutine hinzu, um spezifische Fehlermeldungen anzuzeigen.

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
    
    ErrorHandler:
    MsgBox "Fehler: " & Err.Description

Häufige Fehler und Lösungen

  • Ungültige Vorreferenz oder Referenz zu unkompiliertem Typ: Dies kann auftreten, wenn das Blatt "Output" in einer der geöffneten Dateien nicht vorhanden ist. Stelle sicher, dass das Blatt existiert.

  • Workbook nicht definiert: Wenn du mit ActiveWorkbook oder ThisWorkbook arbeitest, stelle sicher, dass sie das erwartete Workbook referenzieren.

  • Falscher Pfad: Überprüfe den Datei-Pfad in strmyPath, um sicherzustellen, dass er korrekt ist.


Alternative Methoden

  • Verwendung von Find: Anstatt jedes Arbeitsblatt zu durchsuchen, kannst du die Find-Methode verwenden, um spezifische Zellen zu finden, die du benötigst. Dies kann die Performance verbessern.

  • Kopieren und Einfügen vermeiden: Versuche, direkte Zuweisungen zu verwenden, anstatt Copy und Paste, um deinen Code effizienter zu gestalten.

    ws.Cells(4, 5).Value = ws.Cells(4, 5).Value

Praktische Beispiele

Hier ist ein einfaches Beispiel, um zu zeigen, wie du den Fehler vermeiden kannst. Angenommen, du möchtest auf das Blatt "Output" zugreifen:

Sub Beispiel()
    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = ThisWorkbook ' oder ActiveWorkbook
    On Error Resume Next
    Set ws = wb.Worksheets("Output")
    On Error GoTo 0

    If ws Is Nothing Then
        MsgBox "Das Blatt 'Output' existiert nicht."
        Exit Sub
    End If

    ' Weiterer Code hier...
End Sub

Tipps für Profis

  • Debugging verwenden: Nutze die Debugging-Tools von Excel VBA, um Zeilen schrittweise auszuführen und Variablen zu überwachen.

  • Option Explicit: Füge Option Explicit am Anfang deiner Module hinzu, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Tippfehler zu vermeiden, die zu "ungültigen Vorreferenzen" führen können.

  • Objektvariablen verwenden: Reduziere die Anzahl der Select- und Activate-Befehle, um deinen Code sauberer und effizienter zu gestalten.


FAQ: Häufige Fragen

1. Was bedeutet der Fehler "ungültige Vorreferenz oder Referenz zu unkompiliertem Typ"? Dieser Fehler tritt auf, wenn ein Verweis auf ein Objekt gemacht wird, das nicht existiert oder nicht korrekt definiert ist.

2. Wie kann ich sicherstellen, dass ein Blatt existiert, bevor ich darauf zugreife? Verwende die Evaluate-Methode oder eine Fehlerbehandlungsroutine, um zu überprüfen, ob das Blatt existiert.

3. Welche Excel-Version benötige ich, um VBA zu verwenden? VBA ist in den meisten Excel-Versionen verfügbar, einschließlich Excel 2010, 2013, 2016, 2019 und Microsoft 365.

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