我知道这是一个很多话题,但我找不到答案。
我有一个范围。如果在那个范围内有一个单词,那么我需要它去转到下一个代码。如果没有,请跳过下一个代码继续前进。
我无法定义范围。
这是我的代码:
For a = 4 To 20
If (Range("H" & a).Value = "*nice*") Then
GoTo Clean
Else
GoTo pre
End If
Next
在这个范围内,我确实有“#34; nice"但它仍然跳过干净,直接前往。
怎么了?我如何定义我的范围以及代码如何理解在我的范围内的单词nice"在那里。
答案 0 :(得分:2)
您可以在" nice"之前和之后使用Like
和通配符(*
),如:
If Range("H" & a).Value Like "*nice*" Then
将此行添加到整个代码中:
Option Explicit
Sub TestLike()
Dim a As Long
For a = 4 To 20
If Range("H" & a).Value Like "*nice*" Then
GoTo Clean
Else
GoTo pre
End If
Next
End Sub
答案 1 :(得分:1)
If (Range("H" & a).Value = "*nice*") Then
更改为
If instr(Range("H" & a).Value,"nice")>0 Then
答案 2 :(得分:1)
尝试这样的事情:
Option Explicit
Sub TestMe()
Dim a As Long
For a = 4 To 20
If InStr(1, Range("H" & a).Value, "nice") Then
GoTo Clean
Else
GoTo pre
End If
Next code here
End Sub
只有一个大提醒 - 尽量避免使用goto语句,只要它们在VBA开发中被认为是非常糟糕的做法。你可以做的是创建另一个子例程并从代码中调用它。
答案 3 :(得分:1)
目前你正在寻找字符串* nice *。星号不被视为通配符。
您可以使用Like
运算符,这样您就可以使用星号作为通配符:
If (Range("H" & a).Value Like "*nice*") Then
然后你可以扩展这个;如果您只想要“好”这个词匹配,而不是其他包含“好”的词,您可以使用以下内容:
If " " & UCase((Range("H" & a).Value) & " " Like "[!A-Z]*NICE*[!A-Z]"
虽然使用Like
比使用InStr
慢,但它允许更复杂的匹配,因为它与RegEx的语法相似。
我还建议,不要使用GoTo
语句,而是对要运行的每段代码使用函数或子过程。