Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
972to976
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
972to976
972to976
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Laufzeitfehler, der gar nicht auftreten darf

Laufzeitfehler, der gar nicht auftreten darf
01.05.2008 11:35:48
Norman
Hallo alle,
ich habe anhängenden Code in einem Programm:
Function GetCellRange(oXLWsheet, t As Long, Optional t2) Set GetCellRange = Nothing Application.DisplayAlerts = False On Error Resume Next If Not IsMissing(t2) Then Set GetCellRange = oXLWsheet.Cells.SpecialCells(t, t2) Else Set GetCellRange = oXLWsheet.Cells.SpecialCells(t) End If Application.DisplayAlerts = True End Function


Wie Ihr seht habe ich "On Error Resume Next" im Code. Trotzdem erhalte ich in der Zeile


Set GetCellRange = oXLWsheet.Cells.SpecialCells(t)


einen Laufzeitfehler 1004: Keine Zellen gefunden.
Der Fehler tritt nur und 2003 auf, unter 97 Läuft der Code einwandfrei. Gibt es einen Zustand von Excel, in dem on error resume next nicht funktioniert? Ich bin etwas ratlos und wäre für Hilfe dankbar.
Viele Grüße und vorab vielen Dank
Norman

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Dann schau doch mal in die VBE-Hilfe,...
01.05.2008 12:05:00
Luc:-?
...Norman!
Da steht, dass On Error-Anweisungen stets als erste (nach der Deklaration) im Pgm zu stehen haben. Außerdem ist das Ergebnis der udFkt als Variant deklariert. Das ist zwar unerheblich, aber dann ist auch deine 1.Anweisung unsinnig und auch in anderen Fällen (udF As Range) völlig überflüssig, denn das wäre dann ohnehin der Ausgangszustand. Außerdem sind die udF-Argumente automatisch alle als ByRef (d.h., ein übergebenes Objekt würde verändert, wenn es möglich wäre - bei Subroutinen) und bis auf t auch als Variant deklariert. Aber das Alles könnten Compiler und Laufzeitumgebung tolerieren, aber da liegt sicher auch der Unterschied zwischen xl8 und xl11! Es wäre also u.U. angeraten, die Möglichkeit, dass die entsprechenden Zellen nicht gefunden wdn, anderweitig abzufangen. Resume Next kann durchaus sinnvoll sein, aber nicht immer!
Außerdem frage ich mich wie du Arg1 (oXLWsheet) übergibst. Wenn du die udF aus einer Subroutine aufrufst, kannst du sicher ein Objekt übergeben, aus einer Zellformel heraus dürfte das schwieriger sein. Aber das muss ja nicht die Ursache für nicht gefundene Zellen sein. Vielleicht gibt's die ja mitunter wirklich nicht. Das wäre jedenfalls auch interessant zu wissen...
Gruß Luc :-?

Anzeige
AW: Dann schau doch mal in die VBE-Hilfe,...
01.05.2008 12:16:00
Daniel

Da steht, dass On Error-Anweisungen stets als erste (nach der Deklaration) im Pgm zu stehen haben.


HI
das mag vielleicht für On Error Goto sinnvoll sein, aber On Error Resume Next sollte wirklich nur direkt vor dem Codebereich stehen, für den es gelten soll und sollte schnellstmöglich wieder durch ON Errror Goto 0 deaktiviert werden.
Gruß, Daniel

Ja, aber nur, wenn davor Fehler auftreten...
01.05.2008 12:47:26
Luc:-?
...dürfen/könnten, die nicht abgefangen wdn sollen, Daniel.
Und hier steht vor dieser Anweisung nichts Sinnvolles.
Und On Error GoTo 0 am PgmAnfang ist auch nur sinnvoll, wenn die Prozedur von einer anderen aufgerufen wird, die einen Fehler übergibt bzw "mitschleppt". Besser wäre es allerdings, diesen schon im aufrufenden Pgm abzufangen. Was dann auch für in diesem Pgm entstehende Fehler gilt, die bei einer echten Fehlerbehdl, die zum Verlassen des Pgms führt, auch automatisch zurückgesetzt wdn. Ansonsten sollte wirklich On Error GoTo 0 verwendet wdn...
Gruß Luc :-?

Anzeige
AW: Ja, aber nur, wenn davor Fehler auftreten...
01.05.2008 13:01:00
Nepumuk
Hallo Luc,
mit einer weiteren On Error - Anweisung kannst du eine unbehandelte Fehlerroutine die mit On Error Goto aufgerufen wurde nicht abschließen. Das geht nur mit Resume oder Exit (Sub, Function, Property).
Gruß
Nepumuk

Das meinte ich mit "automatisch",...
01.05.2008 13:12:00
Luc:-?
...Nepumuk.
On Error GoTo 0 wäre da wirklich sinnlos und GoTo 0 überflüssig oder gar sinnlos/unmöglich (weiß ich nicht so genau, da ich das natürlich nie mache)... ;-)
Gruß Luc :-?

Specialcells() in UDF ist übel....
01.05.2008 13:21:00
ransi
HAllo
So ganz kann ich nicht nachvollziehen was die Funktion machen soll, aber über folgendes bin ich auch schon gestolpert.
Specialcells() greift nicht in einer UDF. Warum auch immer....
Folgendes Beispiel:
Tabelle1

 ABCD
142 104
2    
3    
4    
5    
627   
771   
833   
91   
1043   

Formeln der Tabelle
ZelleFormel
C1=test(A1:A10)
D1=testZ(A1:A10)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit


Public Function test(bereich As Range) As Long
Dim C As Range
Set C = bereich.Cells.SpecialCells(xlCellTypeBlanks)
test = C.Count
End Function

Da hilft wirklich nur einen Zähler aufzusetzen und jede Zelle im Bereich zu prüfen.
Public Function testZ(bereich As Range) As Long
Dim C As Range
For Each C In bereich
    If IsEmpty(C) Then testZ = testZ + 1
Next
End Function


ransi

Anzeige
AW: Specialcells() in UDF ist übel....
01.05.2008 13:30:00
Nepumuk
Hallo ransi,
das kann keine UDF sein. Die würde ja nur in ganz speziellen Fällen funktionieren, aber im "Normalfall" einen oft "nichtzusammenhängenden" Bereich zurückgeben. Was willst du mit so einem Bereich in einer Formel? Naja, die Anzahl der gefundenen Zellen ausgeben. Das wäre dann aber auch schon das höchste der Gefühle.
Gruß
Nepummuk

...genau das tut sie ja auch, bloß falsch! orT
01.05.2008 23:26:31
Luc:-?
Gruß Luc :-?

AW: Laufzeitfehler, der gar nicht auftreten darf
01.05.2008 12:07:00
Uduuh
Hallo,
es gibt durchaus Fehler, die nicht auffangbar sind. 1004 gehört dazu. Siehe Auffangbare Fehler in der Hilfe
Gruß aus’m Pott
Udo

Anzeige
AW: Laufzeitfehler, der gar nicht auftreten darf
01.05.2008 12:12:00
Nepumuk
Hallo Norman,
läuft einwandfrei.
Jetzt gibt es zei möglichkeiten.
1. Du schleppst in die Prozedur einen unbehandelten Fehler mit, den du mit On Error Goto an eine Sprungadresse verwiesen hast, aber da nicht abarbeitest.
2. In den Optionen des Editors ist unter Allgemein - Unterbrechen bei Fehler - die Option "Bei jedem Fehler" ausgewählt.
Hier noch ein Tipp, wie du so eine Funktion auswertest ohne wieder eine On Error - Anweisung zu benötigen:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Function GetCellRange(oXLWsheet As Worksheet, t As XlCellType, Optional t2 As Variant) As Range
    On Error Resume Next
    If Not IsMissing(t2) Then
        Set GetCellRange = oXLWsheet.Cells.SpecialCells(t, t2)
    Else
        Set GetCellRange = oXLWsheet.Cells.SpecialCells(t)
    End If
End Function

Public Sub test()
    Dim objRangeCollection As Collection
    Set objRangeCollection = New Collection
    objRangeCollection.Add GetCellRange(Tabelle1, xlCellTypeConstants)
    If objRangeCollection.Item(objRangeCollection.Count) Is Nothing Then
        MsgBox "Nix gefunden"
    Else
        MsgBox objRangeCollection.Item(objRangeCollection.Count).Address
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: Laufzeitfehler, der gar nicht auftreten darf
01.05.2008 15:59:00
Norman
Vielen Dank für die vielen Antworten! Klasse :)
An Luc:
"Da steht, dass On Error-Anweisungen stets als erste (nach der Deklaration) im Pgm zu stehen haben." Ok, hat aber nichts gebracht
"Außerdem ist [...] interessant zu wissen." ... Stimmt, hat aber mit der Sache leider nichts zu tun. Trotzdem danke.
An Daniel:
On error ändert leider auch nichts an dem Problem. Ich benutze on error resume next ganz gezielt. Danke trotzdem.
An Udo:
1004er Fehler fange ich an anderen Stellen auch ab, das funktioniert bestens... Trotzdem danke.
An Nepumuk:
Wie immer Volltreffer:) Die Optionseinstellung hat das Problem behoben. Weißt Du, auf was diese Option steht, wenn Excel frisch installiert ist? Das könnte nämlich sonst bei meinen Kunden zu Problemen führen, die dann umständlich aufzulösen sind. Oder kann ich die Option gar per VBA umstellen.
Vielen Dank noch mal an alle, beste Grüße und einen schönen Vatertag
Gruß
Norman

Anzeige
AW: Laufzeitfehler, der gar nicht auftreten darf
01.05.2008 19:43:54
Nepumuk
Hallo Norman,
keine Ahnung, da ich die sofort auf "In Klassenmodul" umstelle. Aber ich denke Standard ist "Bei nicht verarbeiteten Fehlern". Sonst würde man viel mehr davon in Foren lesen und ich hätte viel mehr Probleme bei unseren Kunden.
Dass du die per VBA setzen kannst, glaub ich nicht. Habs allerdings auch noch nie versucht.
Gruß
Nepumuk

Dank Dir und Gruß!
01.05.2008 20:30:00
Norman
.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige