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自动响应word或excel打开文件时自动出现的消息框