String Instr函数无法检测字符串中的单词
在这个私有函数中,如果满足以下要求,我想设置一个工作表:String Instr函数无法检测字符串中的单词,string,function,excel,named-ranges,vba,String,Function,Excel,Named Ranges,Vba,在这个私有函数中,如果满足以下要求,我想设置一个工作表: 单元格Z1必须包含单词特殊表格 在特殊工作表中,定义为说明的单元格必须包含turn或TRN 但是它不注册单词turn或TRN。我是否错误地使用了InStr功能 Private Function getTransferSheet() As Worksheet Dim ws As Worksheet For Each ws In ThisWorkbook.Sheets If ws.Range("Z1") &l
特殊表格
特殊工作表
中,定义为说明
的单元格必须包含turn
或TRN
turn
或TRN
。我是否错误地使用了InStr
功能
Private Function getTransferSheet() As Worksheet
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
If ws.Range("Z1") <> "Special_Sheet" Then GoTo ContLoop
If InStr(1, ws.Range("Description"), "turn", vbTextCompare) Or InStr(1, ws.Range("Description"), "TRN", vbTextCompare) Then
Set getTransferSheet = ws
Exit Function
End If
ContLoop:
Next
MsgBox "Turn sheet (Last sheet) not found", vbExclamation
End
End Function
Private函数getTransferSheet()作为工作表
将ws设置为工作表
对于此工作簿中的每个ws.Sheets
如果ws.Range(“Z1”)“特殊工作表”,则转到ContLoop
如果仪表(1,ws.Range(“说明”),“turn”,vbTextCompare)或仪表(1,ws.Range(“说明”),“TRN”,vbTextCompare),则
设置getTransferSheet=ws
退出功能
如果结束
ContLoop:
下一个
MsgBox“找不到翻页(最后一页)”,带感叹号
终点
端函数
InStr
函数返回一个int。这里需要一个布尔值。
另外,我认为您不想设置start
,如果是,请不要设置它。您还必须获取范围(“说明”)
尝试:
如果InStr(ws.Range(“Description”).Text“turn”,vbTextCompare)0或InStr(ws.Range(“Description”).Text“TRN”,vbTextCompare)0,则
原始代码与仪表的指令相符。与此相比:
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
你好,ZwoRmi。我试图将其设置为0,但仍然无法工作。@Saud您是否尝试使用调试器?Sry,我不是最擅长调试的:/。当我切换断点并运行代码时,它跳过了第二个if语句(带有特殊的单词)@Saud,因此在if
行上切换断点,运行代码,当代码停止时,选择ws.Range(“Description”)
,右键单击,然后添加watch
,您将看到值。当我这样做时,我得到值:。类型:空
' 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