2016-05-10 19 views
0

Ich möchte ein Unterprogramm zu einem VBA-Makro hinzufügen, das in einem Excel-Sheet "LB Rack" im Bereich B2: B200 nach einem Wert ("Tag") sucht. Wenn das Tag gefunden wird, möchte ich, dass es ein anderes Sub "InsertSVblock" ausführt. Wenn das Tag nicht gefunden wird, möchte ich, dass es eine Msgbox-Nachricht ausgibt, und führe den Unterbefehl "CheckforLBmatch (tag)" aus, der ein anderes Blatt durchsucht.VBA Untersuche Excel

Meine Methode ist eine SVERWEIS auf dem Bereich zu tun, und prüfen, ob Fehler 1004.

Es ist bis zu einem Punkt Aufarbeiten - wenn es keine Übereinstimmung findet, ist es die Fehlermeldung ausgibt, und läuft " CheckforLBmatch (Tag) ". Aber wie kann ich "InsertSVblock" ausführen, wenn eine Übereinstimmung gefunden wird? Oder gibt es einen besseren Weg, dies zu tun?

Public Sub CheckforLBmatch(tag) 

Dim xlApp As excel.Application 
Dim xlbook As excel.Workbook 
Dim xlSht As excel.Worksheet 
Set xlApp = CreateObject("Excel.Application") 
Set xlbook = GetObject("C:\07509\LB_RACKTMC.xlsx") 
Set xlSht = xlbook.Sheets("LB RACK") 
Set LBrng = xlSht.Range("B2:B200") 

On Error GoTo ErrorHandler 

     Debug.Print xlApp.WorksheetFunction.VLookup(tag, LBrng, 3, False) 

Exit Sub 

ErrorHandler: 
If Err.Number = 1004 Then 
    MsgBox "No SV component in LB Rack for " & tag 
    Err.Clear 
    CheckforET200match (tag) 
    End If 
    Resume Next 

End Sub 
+0

[hier] (http://www.ozgrid.com /VBA/find-method.htm) ist eine gute Ressource für die Verwendung von Find. Es wird geprüft, ob etwas gefunden wurde. – gtwebb

Antwort

1

Verwenden Sie einfach die Range.Find() Methode. Basierend auf Ihren Code, den ich nehme an, Sie dieses Unter aus einer anderen Office-Anwendung sind anrufen und Sie haben einen Verweis auf die Excel-Objekte Bibliothek gesetzt:

Sub CheckForLBMatch(tag As Variant) 

Dim xlApp   As New Excel.Application 
Dim xlBook   As Excel.Workbook 
Dim xlSheet   As Excel.Worksheet 
Dim xlSearchRange As Excel.Range 
Dim xlFoundRange As Excel.Range 

    Set xlBook = xlApp.Workbooks.Open("C:\07509\LB_RACKTMC.xlsx") 
    Set xlSheet = xlBook.Sheets("LB RACK") 
    Set xlSearchRange = xlSheet.Range("B2:B200") 
    Set xlFoundRange = xlSearchRange.Find(tag) 

    If xlFoundRange Is Nothing Then 
     MsgBox "The value (" & CStr(tag) & ") could not be found!", vbOkOnly + vbInformation 
     CheckForET200Match tag 
    Else 
     InsertSVblock 
    End If 

xlBook.Close False '// Optional [SaveChanges] argument 

Set xlBook = Nothing 
xlApp.Quit 
Set xlApp = Nothing 

End Sub 
+0

Das ist richtig - es tatsächlich von Autocad – tmccar

+0

ist, wenn ich die „CheckForLBMatch“ sub laufen, wirkt es, als ob es den Wert tat finden. Wenn ich das "Not" entferne, gibt es die MsgBox-Nachricht aus (was passieren soll) ... ?? – tmccar

+0

@tmccar Entschuldigung, habe mich dort vermischt! Entfernen Sie das 'Not', wie Sie vorgeschlagen haben, und das Recht, ich werde die Antwort auch bearbeiten –

0

Als ich anfing, mit VBA zu arbeiten, habe ich versucht, alle Excel-Funktionalität mit Makros zu erreichen; Dies ist jedoch manchmal weniger effizient als einfach Excel zu verwenden.

Ich würde den SVERWEIS in das Arbeitsblatt fest codieren. Auf diese Weise können Sie Ihren Code in Fälle basierend auf dem Wert der Zelle trennen und viel einfacher testen. Wenn IsNumeric(Cell.Value), führen Sie Ihre Subroutine, sonst behandeln Sie das Problem.