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

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

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

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

220 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige