在这个私有函数中,如果满足以下要求,我想设置工作表:
adb shell
Special_Sheet
中,定义为Special_sheet
的单元格必须包含Description
或turn
。但它没有注册单词TRN
或turn
。我是否错误地使用TRN
功能?
InStr
答案 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