我正在尝试在整行中搜索包含“ PROFILE”的字符串。它将始终大写,但格式为例如“ [9] PROFILE001”。
一些额外的信息:我已经使用Find命令找到了要在其中搜索字符串的行。它有自己的变量,我试图将其纳入所使用的范围。
我在这里搜索了多个部分字符串文章,但无法在我的代码中实现它。我尝试使用Like命令和IntStr命令无济于事。我认为我的问题可能是我如何引用搜索范围或如何搜索。
这是我当前代码的摘录:
'finding item name row
Set FindRow3 = Range("A1:A100").Find("Item Name", LookIn:=xlValues)
itemnamerow = FindRow3.Row
'The section above is working as intended
'searching for the word profile, the section below is the one I am having issues with
Range("B8:Z100").Style = "Normal"
If ActiveSheet.Range("B" & itemnamerow & ":Z" & itemnamerow) Like "*PROFILE" Then
Range("C1").Value = "it worked"
End If
我当前遇到运行时错误13,在“ If ActiveSheet ...”行中键入不匹配。我无法获得正确的索引来使此正确。
如果试图找到部分字符串,我会尝试使用它。
TIA
答案 0 :(得分:3)
您需要使用Find
和MatchCase
参数设置的LookIn
方法。可能LookAt
可以确保检查实际值而不是公式语法。
Dim profileFound as Range
Set profileFound = ActiveSheet.Range("B" & itemnamerow & ":Z" & itemnamerow).Find("PROFILE",lookIn:=xlValues,MatchCase:=True,lookAt:=xlPart)
If Not profileFound is nothing Then
debug.print profileFound.Value
Range("C1").Value = "it worked"
else
debug.print "no profile found"
End If
原始代码失败的原因是因为Excel不允许您根据单个值评估多单元格范围。您可以遍历该范围内的每个单元格并分别检查每个单元格,但是由于Find
可用,因此是多余的。
答案 1 :(得分:3)
您没有为Range.Find操作提供足够的参数。切换到工作表的“匹配项”以找到项目名称,然后再次作为通配符搜索以找到 profile 。
dim m as variant, n as variant
m = application.match("Item Name", range("A1:A100"), 0)
If not iserror(m) then
n = application.match("*profile*", cells(m, "B").resize(1, 25), 0)
If not iserror(n) then
Range("C1").Value = "it worked " & cells(m, n+1).value
end if
end if