2016-05-10 18 views
0

Excelシート「LB Rack」の範囲B2:B200の値(「タグ」)を検索するVBAマクロにサブルーチンを追加します。 タグが見つかった場合は、別のサブ "InsertSVblock"を実行します。 タグが見つからない場合は、Msgboxメッセージを出力し、別のシートを検索するサブ "CheckforLBmatch(タグ)"を実行します。VBA sub to search Excel

私の方法は、それはポイントまで働いている範囲でVLOOKUPを行うことで、エラー1004

をチェック - それは、一致が見つからない場合は、「エラーメッセージ、および実行を出力CheckforLBmatch(タグ) "しかし、一致が見つかった場合、どのようにして "InsertSVblock"を実行することができますか? これを行うには良い方法がありますか?

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

[ここ](http://www.ozgrid.com:あなたのコードに基づいて、私はあなたが別のOfficeアプリケーションからこのサブを呼び出していると、あなたがオブジェクトライブラリをExcelへの参照を設定していると仮定しています/VBA/find-method.htm)はfindを使う上での良いリソースです。何かが見つかったかどうかを調べる方法についてのケースを経る。 – gtwebb

答えて

1

Range.Find()メソッドを使用してください。

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

そうです、それは実際にオートキャドから来たものです – tmccar

+0

"CheckForLBMatch"サブを実行すると、値を見つけたかのように動作します。 「Not」を削除すると、MsgBoxメッセージが出力されます(これは何が起こるべきでしょうか)。 – tmccar

+0

@tmccar申し訳ありませんが、そこに混ざりました!あなたが示唆したように 'Not'を削除し、その権利も解読します –

0

私はVBAで作業を始めたとき、私は自分自身がマクロですべてのExcel機能を達成しようとしました。ただし、単にExcelを使用するよりも効率が低下することがあります。

VLOOKUPをワークシートにハードコードします。そうすれば、コードをセルの値に基づいてケースに分割し、さらに簡単にテストできます。 IsNumeric(Cell.Value)の場合は、サブルーチンを実行し、それ以外の場合は問題を処理します。