【问题标题】:VBA sub to search ExcelVBA 子搜索 Excel
【发布时间】:2020-07-02 22:37:34
【问题描述】:

我想向 VBA 宏添加一个子例程,该宏在 B2:B200 范围内的 Excel 工作表“LB Rack”中搜索值(“标记”)。 如果找到标签,我希望它运行另一个子“InsertSVblock”。 如果未找到标签,我希望它输出一条 Msgbox 消息,并运行 sub“CheckforLBmatch(tag)”,它会搜索另一张表。

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

它正在工作到一定程度 - 如果找不到匹配项,它会输出错误消息,并运行“CheckforLBmatch(tag)”。但是,如果找到匹配项,我怎样才能让它运行“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

【问题讨论】:

  • here 是一个很好的使用 find 的资源。它通过一个案例来检查是否找到任何东西。

标签: excel vba macos


【解决方案1】:

只需使用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

【讨论】:

  • 当我运行“CheckForLBMatch”子程序时,它就像确实找到了值一样。如果我删除“不”,它会输出 MsgBox 消息(这是应该发生的)...??
  • @tmccar 抱歉,搞混了!按照您的建议删除Not,它是正确的,我也会编辑答案
【解决方案2】:

当我开始使用 VBA 时,我发现自己正在尝试使用宏来完成所有 Excel 功能;但是,有时这比简单地使用 Excel 效率低。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2020-06-07
    • 1970-01-01
    • 2013-10-21
    • 2013-03-18
    • 1970-01-01
    相关资源
    最近更新 更多