Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1472to1476
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehlermedlung Projektoder Bibliothek nicht gefunde

Fehlermedlung Projektoder Bibliothek nicht gefunde
02.02.2016 13:17:25
Jürg
Liebe Kolleginnen und Kollegen
Ich benötige wieder einmal Eure Hilfe. Ich habe eine Funktion programmiert, welche in einem Sheet mehrmals aus Zellen aufgerufen wird. Diese Funktion kann einen Fehler verursachen, weil ein Range-Objekt nicht gefunden wird. Diesen Fehler habe ich mit dem Error Objekt abgefangen und das funktioniert auch (siehe unten).
Nun aber das Problem: Nachdem das Fehlerhandling zu letzten mal durchlaufen wurde, erscheint trotzdem die Fehlermeldung: "Projekt oder Bibliothek nicht gefunden". Diese Meldung erscheint nur wenn Err.Number 0 true lieferte. Werden alle Range-Objekte gefunden läuft die Funktion einwandfrei.
Herzlichen Dank zum Voraus für Eure Hilfe
Gruss Jürg
On Error Resume Next
Test = ws.Range(Spalte.Value).Column 'das Range(Spalte.Value)- Objekt kann unter gewissen Umständen nicht existieren
If Err.Number 0 Then
Wert2 = "#" & Err.Number
Err.Clear
Else
Wert2 = ws.Cells(ws.Range(Zeile.Value).Row, ws.Range(Spalte.Value).Column).Value
End If
On Error GoTo 0

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlermedlung Projektoder Bibliothek nicht gefunde
02.02.2016 14:37:31
Rudi
Hallo,
was ist denn Spalte?
Gruß
Rudi

AW: Fehlermedlung Projektoder Bibliothek nicht gefunde
02.02.2016 14:50:06
Jürg
Hallo Rudi
Herzlichen Dank für Deine Nachfrage.
Spalte ist eine Range-Objekt (Zelle). In dieser Zelle steht der Name eines anderen Range-Objekts (Einspaltiger Range).
Gruss Jürg

In einer FehlerBehandlung nutzt dir das ...
02.02.2016 15:52:12
Luc:-?
Err.Clear gar nichts, Jürg,
die Prozedur bleibt im Fehlermodus. Du musst also im Falle eines (hier erlaubten) Fehlers zur normalen Prozedur zurückkehren. An deinem Ausschnitt kann man das nicht eindeutig erkennen, denn üblicherweise erfolgt eine F-Behandlung am PgmEnde. Wenn dann unter bestimmten Bedingungen normal fortgesetzt wdn soll, ist hier zwingend Resume bzw Resume Next erforderlich.
Außerdem, wenn man eine F-Behandlung einbaut, was prinzipiell zu empfehlen ist, besonders aber bei UDFs, die in ZellFmln verwendet wdn sollen, sollte man niemals die F-Behandlung an VBA zurückgeben (On Error GoTo 0, höchstens zu TestZwecken). In diesen Fällen sollte man bei SubProzduren eine Meldung mit der F-Beschreibung generieren, in UDFs einen Standard-F-Wert, zB deineUDF = CVErr(xlErrNA), oder F-Text der UDF als Ergebnis zuweisen (analog deinem Wert2 = "#" & Err.Number).
Ich frage am Anfang einer F-Behandlung auch mal gerne If CBool(Err.Number) Then, was einen vorausgehenden (Über-)Sprungbefehl einsparen kann.
Allerdings hätte ich das Konstrukt* ohnehin nicht so aufgebaut, sondern ggf so (nach On Error Resume Next):
If IsError(ws.Range(Spalte.Value).Column) Then
usw, bzw bei ObjektVariablen im Nachlauf, also, wenn der Fehler bereits aufgetreten ist:
If objTest Is Nothing Then
Dabei muss natürlich gesichert sein, dass vor der fehlerbehafteten Zuweisung das Objekt auch Nothing ist.
* Abgesehen mal von seiner Merkwürdigkeit. ;-]
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: In einer FehlerBehandlung nutzt dir das ...
03.02.2016 08:27:55
Jürg
Hallo Luc
Herzlichen Dank für Deine Anregungen. Ich habe Sie durchgetestet - leider ohne Erfolg.
Die Variante mit If IsError(ws.Range(Spalte.Value).Column) Then... führte dazu, dass die Funktion wieder an den Anfang sprang und gar nichts mehr rechnete. Wenn ich die Fehlerbehandlung nicht mehr an Excel zurückgebe ( On Error goto 0),gab die Funktion für alle Zellen einen Fehler auch dort wo gerechnet werden könnte. Ich gebe nach einer Fehlerroutine immer an Excel zurück. Ich habe ohne ganz schlechte Erfahrungen gemacht. Denn den letzten Bug findet man bekanntlich nie... und so können falsche Resultate gerechnet werden ohne, dass man es merkt.
Langsam habe ich den Verdacht, dass der Fehler ganz wo anders liegt. Aber hier noch mal die ganze Funktion in leicht angepasster Form. Vielleicht hilft das weiter.
Function Wert2(tbl As Range, Zeile As Range, Spalte As Range)
'Diese Funktion schreibt die Werte in die Tabellen für die Grafik unter verwendung der Bereiche
Dim ws As Worksheet
Dim Test As Range
'Stop
Application.Volatile
Set ws = Worksheets(tbl.Text)
On Error Resume Next
Set Test = ws.Range(Spalte.Value)
On Error GoTo 0
If Not Test Is Nothing Then
Wert2 = ws.Cells(ws.Range(Zeile.Value).Row, ws.Range(Spalte.Value).Column).Value
Set Test = Nothing
Else
Wert2 = "#" & Err.Number
End If
Set Zeile = Nothing
Set Spalte = Nothing
Set ws = Nothing
End Function
Vielen Dank für Deine Bemühungen
Gruss Jürg
Anzeige

194 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige