2017-03-18 6 views
0

Ich habe derzeit ein Problem mit dem Auffüllen eines Benutzerformulars.Füllen Benutzerformular Fehler "Typ nicht übereinstimmen"

Problem: Wenn ich ein Ticket # und drücken Sie Suche, möchte ich das Benutzerformular ausfüllen. Aber wenn ich versuche, es auszuführen, tritt ein Typkonflikt auf. Ich habe versucht, das Textfeld als Integer oder String zu setzen und die Quelle im Arbeitsblatt in den entsprechenden Typ zu ändern, aber dann tritt ein ungültiges Qualifikationsmerkmal auf.

was komisch ist, ich habe versucht, es zu vereinfachen, um den Code zu testen und es funktioniert so bin ich mir nicht sicher, was ich falsch mache.

Option Explicit 

Private Sub cbSearch_Click() 

Dim vResult 

'not sure if these are needed or not 
'Dim TextBox2 As Integer 
'Dim TextBox9 As Integer 
'Dim TextBox4 As String 

vResult = Application.CountIf(Worksheets("Journal").Range("A2:A10000"), Me.TextBox1.Value) 

If vResult > 0 Then 
    'Error occurs here. "Could not set the Value properly. type mismatch. But when I try to set it(TextBox2, TextBox9, etc..) 
    'as a string or Integer it comes back as invalid qualifier 
    TextBox2.Value = Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 14, False) 
    TextBox9.Value = Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 15, False) 
    TextBox4.Value = Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 5, False) 

    'I also want the data to be imported to the userform to check the checkbox if it applies. I used 1 for true and 0 for false 
    CheckBox1.Value = Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 30, False) 
    CheckBox2.Value = Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 31, False) 
Else 
    MsgBox "No match found. Please try again." 
End If 

End Sub 
+1

Überprüfen Sie die Ergebnisse Ihrer VLookups - Sind die ersten drei zurückgegebenen Zeichenfolgen (oder etwas, das implizit in eine Zeichenfolge umgewandelt werden kann)? Sind die letzten zwei Booleans? – YowE3K

Antwort

0

Versuchen Sie, „saubere“ Ihre VLookup Ergebnisse CStr verwenden und die Textfelder Eigenschaft ändern zu „.Text“.

Me.TextBox2.Text= Cstr(Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 14, False)) 

Die Kontrollkästchen, was Sie tun können, ist eine IF-Anweisung

If Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 30, False) = 0 then 
CheckBox1.Value = False 
Else 
CheckBox1.Value = True 
End if 

Auch müssen Sie nicht die „TextBox“ Variable deklarieren, es ist ein Objekt, das Sie es einfach direkt verweisen.

0

Es gibt eine kürzere Möglichkeit, die Checkbox zu setzen.

CheckBox1.Value = Cbool(If Application.VLookup(TextBox1.Value, Sheets("Journal").Range("A:BA"), 30, False)) 

wird diese Formel Wahr zurück, wenn die VLookup eine beliebige Anzahl und False zurückgibt, wenn es 0. Verwenden Sie gibt On Error Resume Next die Möglichkeit aufzunehmen, dass VLookup einen Fehler zurückgibt. Zum Beispiel

Dim Chk As Boolean 
Chk = False 
On Error Resume Next 
Chk = Cbool(If Application.VLookup(Me.TextBox1.Value, Sheets("Journal").Range("A:BA"), 30, False)) 
On Error Goto 0  ' reinstates "Break on error" 
CheckBox1.Value - Chk 

Wenn der VLookup einen Fehler zurückgibt, werden Chk den Wert, um es vor dem Aufruf, in dem obigen Code False zugewiesen behalten.

Beachten Sie, dass der Wert eines Kontrollkästchens ein Boolescher Wert (True/False) ist. VB konvertiert eine 0, die Sie False zuweisen und konvertiert möglicherweise eine 1 in True. Tatsächlich ist das numerische Äquivalent von True -1, aber VB wird einige Werte erzwingen, wenn es das Gefühl hat, dass es die Absicht des Benutzers versteht.

Verwandte Themen