Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ScrollBar
BildScreenshot zu ScrollBar ScrollBar-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Laufzeitfehler Typenkonflikt (User Form)

Betrifft: Laufzeitfehler Typenkonflikt (User Form) von: Burak
Geschrieben am: 04.09.2014 16:41:24

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?

  

Betrifft: AW: Laufzeitfehler Typenkonflikt (User Form) von: fcs
Geschrieben am: 05.09.2014 09:42:37

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


  

Betrifft: AW: Laufzeitfehler Typenkonflikt (User Form) von: Burak
Geschrieben am: 05.09.2014 11:24:46

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



  

Betrifft: AW: Laufzeitfehler Typenkonflikt (User Form) von: fcs
Geschrieben am: 05.09.2014 12:18:37

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


 

Beiträge aus den Excel-Beispielen zum Thema "Laufzeitfehler Typenkonflikt (User Form)"