VBA 相当于 Excel 的“Search()”

Posted

技术标签:

【中文标题】VBA 相当于 Excel 的“Search()”【英文标题】:VBA equivalent to Excel's "Search()" 【发布时间】:2015-09-16 20:28:59 【问题描述】:

我有一个需要帮助的任务。共有三列:A 列(用户名)、B 列(类别)和 C 列(注释)。我必须创建一个子,根据类别(例如管理员)检查 B 列下的每个单元格。例如,如果在 B2 中找到字符串“Admin”,则在 A2 中搜索:“john.deer”、“BES”或“mars”。如果找到“john.deer”,则 C2 表示“域管理员帐户”,如果找到“BES”,则 C2 表示“BES 管理员帐户”等。

但是,如果在 C 列中未找到“Admin”,则在 C2 中搜索“SQL”。如果找到“SQL”,则在 A2 中搜索“SQL Server”、“SQL Engine”和“SQL Cluster”。与上一段完全相同的任务,除了在 B 列和 A 列中搜索不同的字符串。不同的字符串也输出到 C 列。

我有一个完美的等式,只需要为 VBA 创建一个等价物:

=IF(NOT(ISERROR(SEARCH("admin",B3))),IF(NOT(ISERROR(SEARCH("john.deer",A3))),"Domain Admin Account",if(not(iserror(search("bes",a2))),"BES  Admin Account", if(not(iserror(search("mars",a2))),"Cisco Admin Account","no category"),IF(NOT(ISERROR(SEARCH("SQL",B3))),IF(NOT(ISERROR(SEARCH("sqlserver",A3))),"SQL Server",IF(NOT(ISERROR(SEARCH("sqlengine",B3))),"SQL Engine Account"," ")))

正如你所说的那样,这就是为什么我希望创建一个 VBA 等价物。但是,VBA 中没有 Search() 对象,只有 .Find。

这是我在发现搜索不起作用之前对 VBA 的尝试:

    Private Sub CommandButton21_Click()

If Not IsError Then
    If Search("ADMIN", "B2") Then 'Searches Col. F for "Admin", then Col. B for type of admin before
                                'populating Notes Col. with specific Note

    If Not IsError Then
        Search("john.deer", "A2") = "Domain Admin Account"
    ElseIf Not IsError Then
        Search("BES", "A2") = "BES Admin Account"
    ElseIf Not IsError Then
        Search("mars1", "A2") = "Admin Account for Cisco Phone System"
    Else
  End If

If Search("admin", "B2") Then
    If Not IsError Then
        Search("uccxadmin", "b2") = "Admin Account for Cisco phone system"

End If
end if
end sub

【问题讨论】:

【参考方案1】:

Instr 是 VBA 等效项

dim Pos as long
Pos=Instr(Range("B2"),"ADMIN")
if pos>0 then 'code if found
else 'notfound
end if

Instr 具有比搜索更多的选项:请参阅文档 here。

【讨论】:

这帮助很大。我创建了一个新子,并在尝试运行时收到“运行时错误:需要 424 个对象”错误消息。我想在这里粘贴新的宏来​​显示,但它有太多的字符。我应该只编辑原始帖子吗? 我只是简单地使用Range - 根据调用例程的时间,可能需要Sheets(...)【参考方案2】:

您可以在 VBA 代码中使用 Excel 中可用的任何函数。您可以在 Application.WorksheetFunction 对象中访问此函数:Application.WorksheetFunction.Search。使用与电子表格中相同的参数。

【讨论】:

以上是关于VBA 相当于 Excel 的“Search()”的主要内容,如果未能解决你的问题,请参考以下文章

使用VBA汇总文件夹下所有Excel文件

如何让VBA自动响应word或excel打开文件时自动出现的消息框

excel vba和python pandas库在处理excel,数据循环嵌套查询方面的比较。

Excel,VBA中,如何判断变量是不是包含特定字符串

vba adodb读取文本文件

使用EXCEL vba下载文件时出现问题