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

Laufzeitfehler Typenkonflikt (User Form)

Forumthread: Laufzeitfehler Typenkonflikt (User Form)

Laufzeitfehler Typenkonflikt (User Form)
04.09.2014 16:41:24
Burak
Hallo,
ich lese schon seit einiger Zeit im Forum mit und konnte bisher die meisten VBA Probleme mit eurer Hilfe/den Beiträgen lösen.
Nun steh ich vor einem Problem, dass mich schon seit Stunden beschäftigt.. ich komme nicht mehr weiter und fand im Forum nichts was mir hilft.
Es geht um einen VBA Code, der eine User Form öffnen soll. Programmiert wurde es von meinem Vorgänger im Büro. Wenn ich den Code ausführe, erscheint Laufzeitfehler, Typenkonflikt und wenn ich auf Debuggen klicke erscheint:
Private Sub CommandButton2_Click()
menu.Hide
Company.Show
[Company] User Form Initialize:
Private Sub UserForm_Initialize()
'Dim dbpwd As String
Dim i As Integer
Me.StartUpPosition = 2
'Set window title
With Company
If MenuAdmin.admin = True Then
.Caption = .Caption & " - ADMIN MODE "
.CommandButton2.Visible = True
ElseIf MenuAdmin.admin = False Then
.Caption = .Caption & " - USER MODE "
End If
End With
'dbpwd = "2013"
TextBox1.Value = 1
Durationbox.Value = "Months"
'Connection with Acces DB
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.ACE.OLEDB.12.0;"
.ConnectionString = "Data source=" & ThisWorkbook.Path & "\FDE_MV_DB.accdb" & " ; Jet  _
OLEDB:Database password = " & dbpwd & ";"
.Open
End With
'Ajout liste companies
SQLcommand = "Select Distinct Name From fde_mv " '######## need index
Set rs = cn.Execute(SQLcommand)
Do While Not rs.EOF
Companybox.AddItem UCase(rs!name)
rs.MoveNext
Loop
rs.Close
cn.Close
Companybox.List = ListSort(Companybox.List)
'Ajout list options FDE
With Optionsbox
.AddItem "Share Price"
.AddItem "Average FDE(sector within country)"
.AddItem "Average FDE (sector globally)"
.AddItem "Volatility"
End With
'Definition scrollbar defaut
ScrollBar1.min = 41420
ScrollBar1.max = CLng(DateAdd("d", -1, Date))
'Ajout list duration
With Durationbox
.AddItem "Days"
.AddItem "Weeks"
.AddItem "Months"
.AddItem "Years"
End With
'Update
'TextBox2.Value = CDate(ScrollBar1.min)
End Sub
Habt ihr eine Idee, wo der Hund begraben ist?

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler Typenkonflikt (User Form)
05.09.2014 09:42:37
fcs
Hallo Burak,
Typkonflikt bedeutte normalerweise, dass einer Variablen oder dem Parameter einer Methode/Funktion ein Wert zugewiesen wird, der nicht dem Typ der Variablen/des Parameters entspricht.
z.B. wenn einer nummerischen Variablen ein Textwert zugewiesen wird.
Nur durch lesen des Codes kann man kaum den Fehler feststellen.
Das einzige was mir aufgefallen ist:
Die Variable "dbpwd" wird noch verwendet, aber sie ist nicht mehr deklariert und es wird ihr kein Wert mehr zugewiesen.
Wenn die Datenbank-Verbindung kein Passwort mehr erfordert, dann solltest du die Zeile
'Dim dbpwd As String
wieder aktivieren, dann hat die Variable den Wert "" (Leerstring)
Für die weitere Fehlersuche solltest du dann beim Debuggen mit F8 den Code Schrittweise ausführen, damit du die Zeile findest, in der der Fehler auftritt und das Makro zur Zeile
Company.Show
zurückspringt. Danach kann man sich dann konkreter nach der Fehlerursache suchen. Dazu setzt du dann in der fehlerverursachenden Zeile einen Haltepunkt und Startest das Userform erneut.
Das Makro stoppt dann an der Zeile und du kannst die Inhalte von Variablen/Parametern etc. prüfen, die ggf. einen verhängnisvollen Inhalt haben oder in der Problemzeile zugewiesen bekommen.
Gruß
Franz

Anzeige
AW: Laufzeitfehler Typenkonflikt (User Form)
05.09.2014 11:24:46
Burak
Hi FCS.
Danke für die Hilfe, habe jetzt dn Fehler näher einkreisen können. Er steckt im SQL Code, genau genommen in der Zeile "Companybox.AddItem UCase(rs!name)" :
'Ajout liste companies
SQLcommand = "Select Distinct Name From fde_mv " '######## need index
Set rs = cn.Execute(SQLcommand)
Do While Not rs.EOF
Companybox.AddItem UCase(rs!name)
rs.MoveNext
Loop
rs.Close
cn.Close

Anzeige
AW: Laufzeitfehler Typenkonflikt (User Form)
05.09.2014 12:18:37
fcs
Hallo Burak,
entweder ist ein Syntaxfehler in rs!name
Oder rs!name gibt einen Fehlercode zurück, weil der SQL-String nicht korrekt ist.
Blende während du im Schrittmodus den Code abarbeitest im VBA-Fenster unter Ansicht das Lokal-Fenster ein.
Hier werden alle Variablen des Makros mit ihren aktuellen Werten angezeigt.
Prüfe mal für rs welche Informationen dort angezeigt werden.
Typischer Weise sollten dies Informationen zur Datenverbindung, Anzahl records etc. sein unter unter Items möglicherweise auch die Daten der einzelnen Datensätze.
Ich kann aber leider keine konkreten Korrekturhilfen geben, da ich mit der Verarbeitung der Daten von SQL-Abfragen unter VBA nicht vertrautbin.
Gruß
Franz
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler Typenkonflikt in VBA beheben


Schritt-für-Schritt-Anleitung

  1. Fehleranalyse: Beginne mit dem Debuggen des Codes. Klicke auf „Debuggen“, wenn der Laufzeitfehler auftritt. Achte besonders auf die Zeile Company.Show, da der Fehler hier auftritt.

  2. Überprüfe die Variablen: Stelle sicher, dass alle Variablen deklariert und initialisiert sind, insbesondere die dbpwd Variable. Wenn kein Passwort erforderlich ist, kannst du die Zeile Dim dbpwd As String aktivieren und der Variable einen leeren String zuweisen.

  3. SQL-Abfragen überprüfen: Teste die SQL-Abfrage auf Syntaxfehler. Hier könnte der Typenkonflikt auftreten, wenn der SQL-String nicht korrekt ist. Achte auf die Zeile Companybox.AddItem UCase(rs!name), da hier der Fehler laut Burak auftritt.

  4. Lokal-Fenster nutzen: Während du den Code im Schrittmodus durchgehst, öffne das Lokal-Fenster im VBA-Editor. Hier kannst du die Werte aller Variablen einsehen und überprüfen, ob rs die erwarteten Informationen liefert.

  5. Fehlerbehebung: Setze Haltepunkte in den fehlerhaften Zeilen, um die Werte der Variablen und Parameter zu überprüfen. Dies hilft, den genauen Punkt zu finden, an dem der Typenkonflikt auftritt.


Häufige Fehler und Lösungen

  • Laufzeitfehler -2147: Dieser Fehler tritt häufig auf, wenn ein Wert einem Parameter zugewiesen wird, der nicht mit dem erwarteten Typ übereinstimmt. Achte darauf, dass alle Variablen korrekt deklariert sind.

  • Nicht deklarierte Variablen: Wenn eine Variable wie dbpwd nicht deklariert ist, kann dies zu unerwarteten Laufzeitfehlern führen. Stelle sicher, dass alle Variablen definiert sind.

  • SQL-Fehler: Ein Fehler in der SQL-Abfrage kann dazu führen, dass der Datensatz nicht wie erwartet zurückgegeben wird, was wiederum den Typenkonflikt auslösen kann. Überprüfe die SQL-Syntax genau.


Alternative Methoden

  • Verwendung von Option Explicit: Setze zu Beginn jedes Moduls Option Explicit, um sicherzustellen, dass alle Variablen deklariert werden müssen. Dies hilft, Tippfehler und nicht deklarierte Variablen zu vermeiden.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem VBA-Code. Das kann helfen, Laufzeitfehler abzufangen und entsprechende Maßnahmen zu ergreifen, bevor der Code abbricht.


Praktische Beispiele

Hier ist ein Beispiel, wie du eine Variable deklarieren und initialisieren kannst:

Dim dbpwd As String
dbpwd = "" ' Setze den Wert auf einen leeren String, falls kein Passwort benötigt wird

Ein Beispiel für die SQL-Abfrage könnte so aussehen:

SQLcommand = "SELECT DISTINCT Name FROM fde_mv"
Set rs = cn.Execute(SQLcommand)

Achte darauf, dass die Namen der Tabellen und Felder in der Datenbank korrekt sind, um Typenkonflikte zu vermeiden.


Tipps für Profis

  • VBA-Dokumentation: Halte die VBA-Dokumentation bereit, um schnell Informationen zu Funktionen und deren Parameter zu finden.

  • Debugging-Techniken: Nutze verschiedene Debugging-Techniken wie das schrittweise Ausführen des Codes und das Überprüfen von Variablen im Lokal-Fenster.

  • SQL-Tests: Teste deine SQL-Abfragen separat in einer Datenbankumgebung, bevor du sie in den VBA-Code integrierst, um sicherzustellen, dass sie korrekt funktionieren.


FAQ: Häufige Fragen

1. Was ist ein Typenkonflikt in VBA? Ein Typenkonflikt tritt auf, wenn einem Parameter oder einer Variablen ein Wert zugewiesen wird, der nicht mit dem erwarteten Datentyp übereinstimmt.

2. Wie kann ich Laufzeitfehler im VBA-Code vermeiden? Stelle sicher, dass alle Variablen deklariert und initialisiert sind, überprüfe SQL-Abfragen auf Syntaxfehler und nutze Option Explicit, um nicht deklarierte Variablen zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige