2016-03-22 17 views
1

Hallo, ich habe eine Tabelle von Zellen, in denen eine der Spalte ist die Sitznummer. Die Sitznummer enthält jedoch einige Zeichenfolgenwerte wie 146A und die meisten Zahlenwerte wie 146. Wenn ich jedoch in VBA die Sitznummer für Vlookup verwende, kann ich die richtige Variable nicht finden, als würde ich dim seatno as integer dann Werte wie 146A geben Fehler und wenn ich dim seat no as string die Zahlen funktionieren nicht .I formatierte den ganzen Sitz keine Spalte zu Text in Excel, aber der Fehler besteht weiter. Daher brauche ich Hilfe, wie ich die Variable definieren kann, die alle Werte von 1 bis 146A anzeigen würde. Dies ist der Code, den ichFehler bei der Definition der Variablen

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 

    Dim answer As Integer 
    answer = TextBox1.Value 
    TextBox2.Value = WorksheetFunction.VLookup(answer, Sheets("L12 - Data Sheet").Range("B:E"), 2, False) 
    TextBox3.Value = WorksheetFunction.VLookup(answer, Sheets("L12 - Data Sheet").Range("B:E"), 3, False) 
    TextBox4.Value = WorksheetFunction.VLookup(answer, Sheets("L12 - Data Sheet").Range("B:E"), 4, False) 

End Sub 
+0

Es klingt wie Sie halbe Zahlen und halben Text haben in 'Sheets (" L12 - Datenblatt "). Bereich (" B: B ")'. Fix die Daten, so dass sie alle Text sind. Standardmäßig wird Text in einer Zelle linksbündig ausgerichtet. Zahlen sind rechtsbündig. – Jeeped

+0

Ich linksbündig sie und markiert die ganze Spalte in das Textformat zu konvertieren, aber immer noch Fehler @Jeeped – Niva

+0

Wenn 'Sheets (" L12 - Datenblatt "). Bereich (" B: B ")' ist definitiv Textwerte (einschließlich Text -dass-sieht-wie-eine-Nummer aus und verwendet dann Dim-Antwort als String. – Jeeped

Antwort

1

Wenn Spalte B getan haben in Blätter - auf jeden Fall dann Antwort erklären Text ("L12 Data Sheet") wird als String zurück.

Dim answer As String 
answer = TextBox1.Value 
TextBox2.Value = WorksheetFunction.VLookup(answer, _ 
        Sheets("L12 - Data Sheet").Range("B:E"), 2, False) 

Wenn es eine Kombination von Zeichenketten (zB 146A) und wahre Zahlen (zB 146) in ‚L12 - Datenblatt‘ B: B dann rufen Sie den Wert von TextBox1 als String und versuchen, es zu konvertieren zu einer wahren Zahl.

Dim answer As String 
answer = TextBox1.Value 
TextBox2.Value = WorksheetFunction.VLookup(Iif(IsNumeric(answer), Int(answer), answer), _ 
        Sheets("L12 - Data Sheet").Range("B:E"), 2, False) 

Wenn es keine konsistente Werttyp auf die Werte in ist ‚L12 - Datenblatt‘ B: B traf es dann alles, was Sie zur Verfügung haben.

Dim answer As Variant, mtch As Long 
answer = TextBox1.Value 

Select Case True 
    Case Not IsError(Application.Match(CStr(answer), Sheets("L12 - Data Sheet").Columns(2), 0)) 
     mtch = Application.Match(CStr(answer), Sheets("L12 - Data Sheet").Columns(2), 0) 
    Case Not IsError(Application.Match(Int(answer), Sheets("L12 - Data Sheet").Columns(2), 0)) 
     mtch = Application.Match(Int(answer), Sheets("L12 - Data Sheet").Columns(2), 0) 
End Select 

'error control needed here in case mtch is still not a row number 
debug.print mtch 
TextBox2.Value = Sheets("L12 - Data Sheet").Cells(mtch, "C").Value 
TextBox3.Value = Sheets("L12 - Data Sheet").Cells(mtch, "D").Value 
TextBox4.Value = Sheets("L12 - Data Sheet").Cells(mtch, "E").Value 
+0

Alle Codes erhalten einen Fehler bei Antwort = Textbox1.value. Wahrscheinlich, weil das Programm erwartet, dass es Nummer ist, aber es kam als eine Zeichenfolge heraus – Niva

+0

Siehe meine überarbeitete Variante Ansatz oben. Es würde helfen, einige tatsächliche Daten zu sehen. Veröffentlichen Sie einen Link zu redigierten Daten in einer Beispielarbeitsmappe. – Jeeped

+0

es funktioniert perfekt! Danke für die mühe – Niva

Verwandte Themen