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

Runtime Error 80020005

Forumthread: Runtime Error 80020005

Runtime Error 80020005
11.02.2016 00:22:58
Rudolf
Hallo Zusammen
Ich bin am Rande der Verzweiflung :)
Ich habe eine Userform(Kundenliste) für mein Büro erstellt, welche ganz gewiss nicht sehr professionell programmiert wurde, aber bei mir zuhause "immer" funktioniert ohne irgendwelche Ausnahmen. Ich habe eine etwas abgeänderte File beigelegt.
Nun, sobald ich mir diese File in meine Büro sende, funktioniert die File manchmal und manchmal erscheint beim Aufrufen der UserForm (die Zweite nach dem Klick auf die Lupe) eine Laufzeitfehler (siehe Anhang).
https://www.herber.de/bbs/user/103447.xlsm
Was vollkommen unverständlich ist, dass die Meldung manchmal erscheint und manchmal, nachdem ich im Büro Excel schliesse und wieder öffen funktioniert die UserForm wiederum ohne Fehler..... und kurz darauf erscheint wieder die gleiche Fehlerneldung.... ohne dass ich irgendetwas geändert hätte.
Userbild
Ich habe mich stundenlang durch das Netz gewühlt und nichts gescheites gefunden.
Woran könnte das liegen?
Wie gesagt, bei mir Zuhause (Excel 2013) habe ich NIE eine Laufzeitfehlermeldung.
Herzlichen Dank und Grüsse
Rudi

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Runtime Error 80020005
11.02.2016 08:59:20
ChrisL
Hi Rudolf
Vermutetes Problem: Dezimaltrennzeichen gemäss Ländereinstellung.
Ich verwende "." als Dezimaltrennzeichen. Darum kann der String nicht in einen Double-Wert umgewandelt werden: Cells(zeile, 1) = CDbl(txtZR)
cu
Chris

AW: Runtime Error 80020005
11.02.2016 10:25:29
EtoPHG
Hallo Rudolf,
Ich komme nochmals auf ein paar Grundlagen und Empfehlungen bzgl. VBA-Programmierung zurück:
Wenn ich deine(n) Code(s) anschaue:
1. Option Explicit gehört als erste Zeile in jede Codeklasse. Das verhindert die implizite Variablendeklaration und damit eine häufige Fehlerquelle. Einstellungen im VBE - Extras - Optionen - |Editor| - [x] Variablendeklaration erforderlich, schreibt die Deklaration automatisch in jedes neue Codemodul.
2. Die Deklaration von Variablen für Zeilen- oder Spalten-Index sollte immer vom Typ Long sein. Seit XL2007 sind mehr Zeilen möglich, als in einem Integer Platz haben.
3. Die Referenzierung von Objekten peinlichst beachten. Beispiel:
' Unvollständig, weil
Sheets(1).Cells(Cells.Rows.Count, 1)
' a) Sheets ist eine Collection die auch Sheets ohne Cell-Objekte beinhalten kann
' b) Sheets ohne Parent bezieht sich auf das gerade aktive Workbook
' c) Cells.Rows.Count ohne Parent bezieht sich auf das gerade aktive Blatt
' d) Das gerade aktive Blatt könnte ein Blattyp sein, das keine Cell-Objekte beinhaltet
' Vollständig wäre (Parent = Workbook in dem sich der Code befindet) z.B.:
ThisWorkbook.Worksheets(1).Cells(ThisWorkbook.Worksheets(1).Rows.Count, 1)

4. Wenn Fehler auftreten, bitte mindestens die Codezeile, noch besser den Code der gesamten Prozedur oder Funktion posten. Wo der Fehler auftritt, kann durch den Button [Debug] in der Fehlermeldung ermittelt werden. Das beugt Vermutungen und Wahrsagen durch Helfer vor. Lies dringend den Artikel, den ich Dir in meiner ersten Antwort verlinkt habe!
5. Benutze die VBA-Hilfe, setze den Cursor auf Schlüsselworte im Code und drücke F1. z.B. ist die Deklaration Global ein Relikt aus Uralt-Excelzeiten und sollte durch Public ersetzt werden!
6. Überarbeite deine(n) Code(s). Wirf alle Codeklassen weg, die nicht gebraucht werden (z.b. deine Klasse1, oder Modul2). Bereinige deine Codes nach den vorgenannten Punkten.
Gruess Hansueli

Anzeige
AW: Runtime Error 80020005
11.02.2016 13:53:49
fcs
Hallo Rudi,
etliche Sachen hat Hansueli dir ja schon erläutert.
Mir ist noch aufgefallen, dass du für Tabellenblätter
With tabCodeName
End With
Konstrukte verwendest. Damit der Bezug zu dem Tabellenblatt hergestellt wird muss vor jedem zugehörigen Objekt (Range, Cells oder auch andere) ein Punkt stehen.
Auf jeden Fall scheint die Variable "zeile" beim Übergang vom Userform1 zum Userform2 ein Sensibelchen zu sein. Zumindest einmal bekamm ich inter Excel2010 einen ähnlichen Fehler angezeigt. Scheinbar verliert die Variable gelgentlich ihren Wert oder bekommt ihn nicht rechtzeitig, so dass in der 1. Anweisung im Userform2 in der die Variable "zeile" auftaucht eine Fehlermeldung angezeigt wird.
Ich hab die folgenden Makros in den Userformen umgestaltet, um den Wert der Zeilennummer des gwählten Datensatzes zu übergeben.
Probiere mal, ob es mit diesen Versionen auf deinem Bürorechner stabiler läuft.
Gruß
Franz
'Userform 1
Private Sub CommandButton1_Click()
'Lupen-Schaltfläche
If ComboBox1.ListIndex >= 0 Then
UserForm2.Tag = Format(Me.ComboBox1.ListIndex + 2, "0") 'gewählte Zeilennummer an das  _
Userform übergeben
Me.Hide
UserForm2.Show
Unload Me
End If
End Sub
'Code im Userform2
Private Sub UserForm_Activate() 'Ist in diesem Fall zur Fehlervermeidung günstiger
'Private Sub UserForm_Initialize()
With tbl_Kuli
zeile = CLng(Me.Tag) 'übergebene Zeilennummer einer Variablen zuweisen
headerZR = .Cells(zeile, 1) 'ZR Nummer Gross oben
headerName = .Cells(zeile, 2) 'Kundename Gross oben
txtZR = .Cells(zeile, 1)
txtKurz = .Cells(zeile, 2)
txtKube = .Cells(zeile, 7)
txtAum = .Cells(zeile, 9)
txtInx = .Cells(zeile, 20)
txtBem = .Cells(zeile, 21)
txtStart = .Cells(zeile, 22)
cmbMopo = .Cells(zeile, 3)
Me.cmbMopo.RowSource = "Tabelle2!H2:H14"
cmbBC = .Cells(zeile, 4)
Me.cmbBC.RowSource = "Tabelle2!J2:J30"
cmbPM = .Cells(zeile, 6)
Me.cmbPM.RowSource = "Tabelle2!L2:L9"
cmbDom = .Cells(zeile, 11)
Me.cmbDom.RowSource = "Tabelle2!A1:A150"
cmbNat = .Cells(zeile, 12)
Me.cmbNat.RowSource = "Tabelle2!A1:A150"
cmbTax = .Cells(zeile, 13)
Me.cmbTax.RowSource = "Tabelle2!F2:F4"
cmbRef = .Cells(zeile, 8)
Me.cmbRef.AddItem ("EUR")
Me.cmbRef.AddItem ("CHF")
Me.cmbRef.AddItem ("USD")
Me.cmbRef.AddItem ("GBP")
'Jetzt kommen die Länderrestriktionen
If .Cells(zeile, 14).Value = "CH" Then
cbxCH.Value = True
End If
If .Cells(zeile, 16).Value = "UK" Then
cbxUK.Value = True
End If
If .Cells(zeile, 15).Value = "FR" Then
cbxFR.Value = True
End If
If .Cells(zeile, 17).Value = "US" Then
cbxUS.Value = True
End If
If .Cells(zeile, 19).Value = "US/EU" Then
cbxSP.Value = True
cbxEU.Value = True
End If
If .Cells(zeile, 19).Value = "EU" Then
cbxEU.Value = True
End If
If .Cells(zeile, 19).Value = "US" Then
cbxSP.Value = True
End If
If .Cells(zeile, 5).Value = "Ja" Then
cbxMopo.Value = True
End If
If .Range(.Cells(zeile, 1), .Cells(zeile, 13)).Interior.ColorIndex = 38 Then
cbxHold.Value = True
End If
End With
End Sub

Anzeige
AW: Runtime Error 80020005
11.02.2016 18:16:44
Rudi
Hallo fcs
Danke an alle für die Unterstützung
Ich habe den Code von dier implementiert, allerdings erscheint ein "Runtime 13 - Error"
bei UserForm1 bei folgendem Abschnitt:
UserForm2.Tag = Format(Me.ComboBox1.ListIndex + 2, "0")
Muss noch etwas berücksichtigen?
Grüsse
Rudi

Anzeige
AW: Runtime Error 80020005
12.02.2016 00:47:40
fcs
Hallo Rudi,
du musst auch die Code-Anpassung im Userform2 machen - Ereignis Userform_Activate statt Userform_Initialize + Zeile aus Userform-Tag-Eigenschaft berechnnen.
Falls das nicht reicht, dann kannst du die Variable "zeile" im Userform-Code am Anfang auch als
Private zeile as Long
deklarieren. Die Deklaration als Public bzw. veraltet Global im Modul ist nicht erforderlich.
Beim Testen mit deiner Datei war das aber nicht nötig.
Gruß
Franz
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Laufzeitfehler 80020005 in Excel beheben


Schritt-für-Schritt-Anleitung

  1. Überprüfe die Ländereinstellungen: Stelle sicher, dass das Dezimaltrennzeichen in den Excel-Optionen mit dem in deinem Code verwendeten übereinstimmt. Bei einem run time error, der auf die Umwandlung von Strings in Double-Werte hinweist, kann dies oft die Ursache sein.

  2. Variablen korrekt deklarieren: Beginne deinen Code immer mit Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind. Dies verhindert häufige Fehlerquellen.

  3. Verwenden der richtigen Datentypen: Deklariere Zeilen- und Spaltenindex-Variablen als Long, um Probleme mit der maximalen Anzahl an Zeilen in Excel zu vermeiden.

  4. Referenzen auf Objekte: Achte darauf, dass Referenzen auf Arbeitsblätter und Zellen vollständig sind. Verwende z.B. ThisWorkbook.Worksheets(1).Cells(...), um sicherzustellen, dass du auf das richtige Arbeitsblatt zugreifst.

  5. Fehlerbehandlung aktivieren: Verwende den Debug-Button in der Fehlermeldung, um die genaue Codezeile zu finden, die den Fehler verursacht.

  6. Code überprüfen: Entferne ungenutzte Codeklassen und Module, um die Lesbarkeit zu erhöhen und mögliche Fehlerquellen zu minimieren.


Häufige Fehler und Lösungen

  • Laufzeitfehler 80020005: Dieser Fehler kann auftreten, wenn es ein Problem mit den Ländereinstellungen oder dem Datentyp gibt. Überprüfe die Dezimaltrennzeichen und stelle sicher, dass die Variablen korrekt deklariert sind.

  • Runtime Error 13: Ein "Type Mismatch" Fehler tritt häufig auf, wenn der Code erwartet, dass eine Variable einen bestimmten Datentyp hat. Stelle sicher, dass du Variablen wie zeile korrekt übergibst und die Datentypen übereinstimmen.

  • Runtime Error 9: Dieser Fehler weist auf ein nicht gefundenes Arbeitsblatt hin. Überprüfe, ob das Arbeitsblatt existiert und korrekt referenziert wird.


Alternative Methoden

  • Verwendung von Option Explicit: Dies sollte in jedem Modul verwendet werden, um sicherzustellen, dass alle Variablen deklariert sind.

  • Verwende Error Handling: Implementiere On Error Resume Next oder On Error GoTo um zu steuern, was passiert, wenn ein Fehler auftritt.

  • Debugging mit MsgBox: Verwende MsgBox zur Überprüfung von Werten vor kritischen Operationen, um sicherzustellen, dass alle Variablen die erwarteten Werte haben.


Praktische Beispiele

' Beispiel zur Umwandlung von GBP in CHF
Dim gbp As Double
Dim chf As Double
gbp = 100 ' Beispielwert in GBP
chf = gbp * 1.2 ' Angenommener Wechselkurs
MsgBox "100 GBP in CHF: " & chf
' Beispiel für die Korrektur von Laufzeitfehlern
Private Sub CommandButton1_Click()
    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
ErrorHandler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
End Sub

Tipps für Profis

  • Nutze die VBA-Hilfe: Setze den Cursor auf Schlüsselwörter im Code und drücke F1, um mehr über Funktionen und deren Anwendung zu erfahren.

  • Regelmäßige Code-Überprüfungen: Überprüfe deinen Code regelmäßig auf unnötige Komplexität und veraltete Syntax.

  • Verwende Debugging-Werkzeuge: Nutze die integrierten Debugging-Werkzeuge in Excel, um Fehler effizienter zu identifizieren.


FAQ: Häufige Fragen

1. Was ist ein Runtime Error?
Ein Runtime Error tritt auf, wenn ein Programm während der Ausführung auf ein Problem stößt, das es daran hindert, korrekt weiterzulaufen.

2. Wie kann ich Laufzeitfehler in VBA vermeiden?
Durch sorgfältige Deklaration von Variablen, Verwendung von Option Explicit, und vollständige Referenzen auf Arbeitsblätter und Zellen kannst du viele Laufzeitfehler vermeiden.

3. Was bedeutet der Laufzeitfehler 80020005?
Dieser Fehler weist häufig auf ein Problem mit Datenkonvertierungen oder Kompatibilitätsproblemen zwischen verschiedenen Excel-Versionen hin.

4. Wie kann ich GBP in CHF umrechnen?
Verwende einen Umrechnungsfaktor in deinem Code, um den Wechselkurs anzuwenden. Achte darauf, dass die verwendeten Variablen den richtigen Datentyp haben.

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