2015-11-12 5 views
0

Я пытаюсь создать пользовательскую форму, где пользователи могут ввести номер партии, а когда они нажмут OK, функция VLOOKUP предоставит им необходимую им информацию. Однако целевые данные находятся на двух разных листах (например, на листе 1 и на листе2).VLookup в нескольких листах

Мне удалось создать VBA ниже, но он работает только для sheet1. И если введена неправильная партия, результат и msgbox не отображаются.

Что я делаю неправильно?

Private Sub CommandButton1_Click() 
On Error GoTo myerrorhandler 

Dim Batch As Long 
Dim Result 
Dim Result2 
Dim Target1 As Range 
Dim Target2 As Range 

Dim ws As Worksheet 

Batch = TextBox1.text 

Set Target1 = ActiveWorkbook.Sheets("sheet1").Range("C7:ZZ10000") 
Set Target2 = ActiveWorkbook.Sheets("sheet2").Range("C7:ZZ1000") 


Result = vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target1, 1, False) 
Result = Result & vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target1, 17, False) 
Result = Result & vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target1, 18, False) 
Result = Result & vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target1, 20, False) 

If Result > 0 Then 
MsgBox "Batch details:" & vbNewLine & Result 

ElseIf Result = 0 Then 

Result2 = vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target2, 1, False) 
Result2 = Result & vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target2, 17, False) 
Result2 = Result & vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target2, 18, False) 
Result2 = Result & vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target2, 20, False) 

If Result > 0 Then 
MsgBox "Batch details:" & vbNewLine & Result2 

ElseIf Result2 = 0 Then 
MsgBox "Not present, or wrong entry" 


End If 
End If 
Exit Sub 


myerrorhandler: 
If Err.Number = 13 Then 
MsgBox "Invalid value" 
End If 
End Sub 

ответ

0

Проблема была тесты в If, Result является строкой и тест Result > 0 не имеет смысла.

Как добавить 8 символов (Batch : + новая линия) при каждом вызове (4) Result, то, что вы имели в виду на самом деле Result > 0Len(Result) > 32.

Это должно быть ближе того, что вы пытаетесь достичь:

Private Sub CommandButton1_Click() 
On Error GoTo myerrorhandler 
Dim Batch As Long 
Dim Result 
Dim Result2 
Dim Target1 As Range 
Dim Target2 As Range 
Dim Ws As Worksheet 

Batch = TextBox1.Text 
Set Target1 = ActiveWorkbook.Sheets("sheet1").Range("C7:ZZ10000") 
Set Target2 = ActiveWorkbook.Sheets("sheet2").Range("C7:ZZ1000") 

Result = vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target1, 1, False) 
Result = Result & vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target1, 17, False) 
Result = Result & vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target1, 18, False) 
Result = Result & vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target1, 20, False) 

If Len(Result) > 32 Then 
    MsgBox "Batch details:" & vbNewLine & Result 
ElseIf Len(Result) = 32 Then 
    Result2 = vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target2, 1, False) 
    Result2 = Result & vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target2, 17, False) 
    Result2 = Result & vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target2, 18, False) 
    Result2 = Result & vbNewLine & "Batch: " & Application.WorksheetFunction.VLookup(Batch, Target2, 20, False) 

    If Len(Result2) > 32 Then 
     MsgBox "Batch details:" & vbNewLine & Result2 
    ElseIf Len(Result2) = 32 Then 
     MsgBox "Not present, or wrong entry" 
    End If 
End If 
Exit Sub 

myerrorhandler: 
    If Err.Number = 13 Then MsgBox "Invalid value" 
End Sub 
+0

Спасибо за Ваш ответ! Ваш код дает те же результаты, что и мой код. Результатом VLOOKUP (Результат и результат2) являются текст. VLOOKUP в листе 2, похоже, не имеет места. – artsjeroen

+0

Вы пытались разместить точки останова, чтобы увидеть, где код идет с тестами? Если вы не знаете, как эффективно дебютировать в VBA, посмотрите на них: excel-easy.com/vba/examples/debugging.html и excelcampus.com/vba/vba-immediate-window-excel, это будет сэкономить часы работы кодера;) – R3uK

Смежные вопросы