VBA子searchExcel

我想添加一个子程序到一个VBAmacros,在Excel表格“LB Rack”中search一个值(“tag”),范围为B2:B200。 如果find标签,我希望它运行另一个子“InsertSVblock”。 如果没有find标签,我希望它输出一个Msgbox消息,并运行子“CheckforLBmatch(标签)”,其中search另一个工作表。

我的方法是在范围上执行VLOOKUP,并检查错误1004。

它正在工作中 – 如果找不到匹配项,则会输出错误消息,并运行“CheckforLBmatch(tag)”。 但是我怎么能得到它运行“InsertSVblock”,如果find一个匹配? 还是有更好的方法来做到这一点?

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 

只要使用Range.Find()方法即可。 基于你的代码,我假设你从一个不同的Office应用程序中调用这个子集,并且你已经设置了一个对Excel对象库的引用:

 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 

当我开始使用VBA时,我发现自己试图用macros来完成所有的Excelfunction; 但是,这有时比简单地使用Excel效率更低。

我会将VLOOKUP硬编码到工作表中。 这样,您可以根据单元格的值将代码分解为多个案例,并且可以更轻松地进行testing。 如果是IsNumeric(Cell.Value) ,运行你的子程序,否则处理这个问题。