提供起始位置时InStrRev的不稳定行为

时间:2013-04-10 14:23:31

标签: ms-access access-vba ms-access-2010

我不明白以下任何一项的结果。我知道InStrRev给出了最后'匹配'的位置(从右到左)&当我不给出开始位置时,我可以理解结果。无论开始是从左还是右开始,1或2都应该给出0以外的其他东西。

Private Sub Form_Load()
Dim TestString As String
TestString = "ABCDEFGHCIJK"
msgbox = InStrRev(TestString, "C", 1) 'produces 0 if optional start parameter is 1 or 2
msgbox = InStrRev(TestString, "C", 3) 'produces 3 if start parameter is 3-8
msgbox = InStrRev(TestString, "C", 9) 'produces 9 if start parameter is 9-12
'13+ produces 0 as expected since its length of string is only 12
End Sub

关于功能的Microsoft文档:access& visual studio。在visual studio页面上,我尝试了页面底部的示例&结果相同,所以我知道它的工作原理。然而,我的大脑没有得到。我也了解InStr功能&没有开始位置

2 个答案:

答案 0 :(得分:2)

OMG我刚拿到它!我很可怕,我倾向于过度思考问题。以下是我认为我被挂断了&有些文件没有明确说明:

  • 这两个功能 开始 位置从左侧开始
  • 返回值是原始字符串中的字符位置(如果找到),无论字符串中您要求函数开始搜索的位置

如果没有HansUp,我无法理解这一点。希望以下是另一种看待它的方式,以防其他人有同样的问题理解:

  • 以下返回5.在A之前,位置为1,在B 2&之前。等等。我们告诉它在C&之前开始搜索其中确实有E的字符串的剩余部分(CDEFGHIJKLMN)

    InStr(3, "ABCDEFGHIJKLMN", "E")

  • 以下返回0.我们告诉它在C&之前开始搜索其中没有E的字符串(AB)的剩余部分。字符串的其余部分在AB上的原因是它从RIGHT-TO-LEFT搜索

    InStrRev("ABCDEFGHIJKLMN", "E", 3)

答案 1 :(得分:1)

我将提供一个不同的例子,我希望能让情况更加清晰。在立即窗口中(使用 Ctrl + g 快捷方式去那里)......

TestString = "123456789"
? InStrRev(TestString, "3", 2)
 0 

该声明要求InStrRevTestString中的第二个字符开始,然后向后搜索字符“3”。由于TestString的前两个字符是“12”,因此在该子字符串中找不到“3”,因此InStrRev返回0. / p>

在这个例子中,我要求InStrRev从第四个角色开始搜索......

? InStrRev(TestString, "3", 4)
 3 

由于TestString的前四个字符是“1234”,因此找到“3”作为第三个字符,因此InStrRev会返回3。

关于语句“1或2应该给出0以外的其他东西 ......这不是真的,正如我的第一个例子所示。