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

Laufzeitfehler bei Application.WorksheetFunction.

Forumthread: Laufzeitfehler bei Application.WorksheetFunction.

Laufzeitfehler bei Application.WorksheetFunction.
20.08.2018 12:54:28
Michael
Die folgende VBA-Anweisung
If Application.WorksheetFunction.CountIfs(Range(B), CText) > 0 Then
liefert einmal die Fehlermeldung 1004
Die CountIfs-Eigenschaft des WorksheetFunction-Objektes kann nicht zugeordnet werden
Folgende Merkwürdigkeiten sind dabei zu beobachten:
1. Fehler nur beim Anwender und nicht auf der Entwicklungsmaschine.
2. Fehler kommt bei der dritten von 140 zu bearbeitenden Dateien / Tabellen.
3. Das VBA-Programm läuft störungsfrei für die restlichen Dateien / Tabellen weiter, wenn über Debuggen die Fortsetzung veranlaßt wird.
4. Dann wurde am Modul etwas verändert (Variaben-Definition in einer anderen Routine) springt der Fehler zur Funktion Application.WorksheetFunction.Max(...
Überall Windows 7 und Excel 2010.
Was ist das Problem / die Lösung?
M.
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler bei Application.WorksheetFunction.
20.08.2018 13:05:11
EtoPHG
Hallo,
Mehrere Ursachen für den Fehler für Range(B) sind möglich:
Die Variable B enthält einen ungültigen Wert um einen Bereich zu qualifizieren. Abhilfe: Debug.Print B zur Überprüfung des Inhalts.
Der Bereich Range(...) ist nicht voll qualifiziert (Workbook.Worksheet.Range(...)), d.h. es wird das (zufällige) aktive Sheet vorausgesetzt. Ist das z.B. ein Diagrammblatt wird genau dieser Fehler auftreten. Abhilfe: Vollständige Referenzierung wie oben beschrieben.
Gruess Hansueli
Anzeige
AW: Laufzeitfehler bei Application.WorksheetFunction.
20.08.2018 13:15:38
Michael
Hallo Hansueli,
danke für die schnelle Rückmeldung.
- im Code steht Rang("B:B")
- am Tabellenblatt und dessen Referenzierung ändert sich nichts zw. Fehlermeldung und Starten des (schrittweisen) Ausführens des ungeänderten Codes!
Andere Ideen zur Lösung? Timing-Probleme?
Gruß
Michael
Anzeige
AW: Laufzeitfehler bei Application.WorksheetFunction.
20.08.2018 13:20:26
EtoPHG
Hallo Michael,
Leider verstehe ich deine Ausführungen:
- am Tabellenblatt und dessen Referenzierung ändert sich nichts zw. Fehlermeldung und Starten des (schrittweisen) Ausführens des ungeänderten Codes!
und habe keine andere Idee. Was soll denn das mit Timing-Problem zu tun haben?
Kann man sich auf deine Level-Angaben verlassen, oder sind die selbstüberschätzt?
Gruess Hansueli
Anzeige
AW: Laufzeitfehler bei Application.WorksheetFunction.
20.08.2018 13:39:01
Michael
Hallo Hansueli,
das Timing ist der einzige Unterschied, den ich derzeit sehe.
Wenn das Programm per Fehlermeldung stoppt, ich es dann jedoch per 'Weitermachen' zum korrekten Ausführen des Codes veranlassen kann, ist die Ablaufzeit der einzige Unterschied.
Die Vermutung kam mir, da ich 'Application.ScreenUpdating = False' brauche.
Das VBA-Projekt hat ca. 10.000 Zeilen Code und ist seit 2012 im kommerziellen Einsatz.
Insofern denke ich schon, einen gewissen Kenntnisstand bzgl. der Software zu haben.
Gruß
Michael
Anzeige
AW: Laufzeitfehler bei Application.WorksheetFunction.
20.08.2018 13:45:55
EtoPHG
Hallo Michael,
Dann ist es ja wohl ein Leichtes:
a) den Fehler abzufangen
b) Etwas (z.B. 1 sec) zu warten
c) und das solange bis kein Fehler mehr auftritt
Gruess Hansueli
;
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler bei Application.WorksheetFunction beheben


Schritt-für-Schritt-Anleitung

  1. Überprüfung der Variablen: Stelle sicher, dass die Variable B in deinem Code korrekt definiert ist und einen gültigen Bereich referenziert. Verwende Debug.Print B, um den Inhalt zu überprüfen.

  2. Vollständige Referenzierung: Anstatt nur Range(B) zu verwenden, solltest du es in der Form Workbook.Worksheet.Range(B) angeben, um Missverständnisse zu vermeiden. Dies hilft, die Fehlermeldung "die vlookup-eigenschaft des worksheetfunction-objektes kann nicht zugeordnet werden" zu verhindern.

  3. Fehlerbehandlung implementieren: Füge eine Fehlerbehandlungsroutine in deinem VBA-Code hinzu, um Laufzeitfehler abzufangen. Zum Beispiel:

    On Error GoTo ErrorHandler
    If Application.WorksheetFunction.CountIfs(Range(B), CText) > 0 Then
       ' Dein Code hier
    End If
    Exit Sub
    ErrorHandler:
       ' Fehlerbehandlung hier
  4. Timeout erhöhen: Wenn du vermutest, dass Timing-Probleme die Ursache sind, kannst du zwischen den Ausführungen eine kurze Pause einfügen. Zum Beispiel:

    Application.Wait (Now + TimeValue("0:00:01")) ' 1 Sekunde warten

Häufige Fehler und Lösungen

  • Fehler 1004: Diese Fehlermeldung tritt häufig auf, wenn die Referenzierung nicht korrekt ist. Achte darauf, dass du die Range korrekt definierst und dass die Arbeitsmappe und das Arbeitsblatt korrekt referenziert sind.

  • Timing-Probleme: Wenn das Programm stoppt und später weiterläuft, könnte dies auf Timing-Probleme hinweisen. Implementiere eine Verzögerung, wie oben beschrieben.

  • Ungültige Werte: Stelle sicher, dass die Variable B nicht leer oder ungültig ist. Überprüfe den Inhalt der Variablen immer, bevor du sie in deinen Funktionen verwendest.


Alternative Methoden

  • Verwendung von Application.WorksheetFunction.If: Wenn du eine Bedingung prüfen möchtest, anstatt CountIfs zu verwenden, kannst du auch Application.WorksheetFunction.If nutzen, um die Logik zu vereinfachen.

  • Verwendung von Arrays: Anstatt mit großen Datenmengen direkt in Excel zu arbeiten, kannst du Daten in ein VBA-Array laden, die Berechnungen durchführen und das Ergebnis zurück in Excel schreiben. Dies kann die Geschwindigkeit verbessern und Fehler minimieren.


Praktische Beispiele

Angenommen, du möchtest prüfen, ob ein Wert in einer bestimmten Spalte existiert:

Dim CText As String
CText = "MeinWert"
Dim B As String
B = "B:B" ' oder eine andere gültige Range

If Application.WorksheetFunction.CountIfs(Range(B), CText) > 0 Then
    MsgBox "Wert gefunden!"
Else
    MsgBox "Wert nicht gefunden."
End If

In diesem Beispiel wird geprüft, ob der Wert CText in der Spalte B vorhanden ist. Wenn du stattdessen eine andere Methode verwenden möchtest, kannst du Application.WorksheetFunction.If in Kombination mit anderen Funktionen verwenden.


Tipps für Profis

  • Code optimieren: Reduziere die Anzahl der Berechnungen, indem du Application.ScreenUpdating auf False setzt, wenn du umfangreiche Änderungen vornimmst.

  • Debugging-Tools nutzen: Verwende Tools wie Debug.Print, um den Status deiner Variablen während der Ausführung zu überwachen.

  • Fehlerprotokollierung: Implementiere ein Protokollsystem, um Fehler zu verfolgen, die während der Ausführung auftreten.


FAQ: Häufige Fragen

1. Warum tritt der Laufzeitfehler nur bei einigen Benutzern auf? Es kann sein, dass unterschiedliche Excel-Versionen oder Einstellungen der Benutzer den Fehler auslösen. Überprüfe, ob alle Benutzer die gleiche Version verwenden.

2. Wie kann ich sicherstellen, dass meine Referenzen korrekt sind? Verwende vollständige Referenzen wie Workbook.Worksheet.Range(...), um Missverständnisse zu vermeiden und sicherzustellen, dass der richtige Bereich ausgewählt wird.

3. Was ist der Unterschied zwischen CountIfs und If in VBA? CountIfs zählt die Anzahl der Zellen, die mehreren Kriterien entsprechen, während If eine Bedingung prüft und verschiedene Aktionen basierend auf dem Ergebnis ausführt.

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