Instr函数无法检测字符串中的单词

时间:2015-09-18 08:49:33

标签: string function excel-vba named-ranges vba

在这个私有函数中,如果满足以下要求,我想设置工作表:

  1. 单元格Z1必须包含单词adb shell
  2. Special_Sheet中,定义为Special_sheet的单元格必须包含Descriptionturn
  3. 但它没有注册单词TRNturn。我是否错误地使用TRN功能?

    InStr

2 个答案:

答案 0 :(得分:2)

InStr函数返回一个int。你想要一个布尔值。 另外我认为您不想设置start,如果没有设置它。您还必须获得Text

Range("Description")

尝试:

If InStr(ws.Range("Description").Text, "turn", vbTextCompare) <> 0  Or InStr(ws.Range("Description").Text, "TRN", vbTextCompare) <>0 Then

答案 1 :(得分:0)

原始代码在instr指令方面是正确的。与此相比:

Function getTransferSheet() As Worksheet
    Dim ws As Worksheet
    Dim test As String

    Set getTransferSheet = Nothing
    For Each ws In ThisWorkbook.Sheets
        If ws.Range("Z1") = "Special_Sheet" Then
            test = ""
            On Error Resume Next
            test = ws.Range("Description").Text
            On Error GoTo 0
            If InStr(1, test, "turn", vbTextCompare) Or InStr(1, test, "TRN", vbTextCompare) Then
                Set getTransferSheet = ws
                Exit For
            End If
        End If
    Next
End Function

即使命名范围'description'不存在,这也会起作用。否则,instr函数将失败,因为比较需要2个字符串。 您使用vbTextCompare选项是正确的 - 它会使比较不区分大小写。

最后,我已经重构了代码,以便在所有情况下提供干净的执行路径,即使无法确定转移表。函数中应该只有一个出口,它应该始终返回一种数据类型。如果您想对失败做出反应,请在调用例程中执行此操作:

' code where this function is called
set ws = getTransferSheet
If ws is Nothing then
    MsgBox "Turn sheet (Last sheet) not found", vbExclamation
    Exit Sub
End If