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

标签 ms-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 页面上,我尝试了页面底部的示例并得到了相同的结果,所以我知道它的工作原理。然而我的大脑还没 react 过来。我也理解带 & 不带起始位置的 InStr 函数

最佳答案

天哪,我刚刚明白了!我很糟糕,我有想太多的倾向。以下是我认为我所关心的内容,并且一些文档没有明确说明:

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

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

  • 下面返回 5。在 A 之前,位置为 1,在 B 之前为 2,依此类推。我们告诉它从 C 之前开始并搜索字符串的剩余部分 (CDEFGHIJKLMN),其中仍然包含 E

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

  • 下面返回 0。我们告诉它从 C 之前开始并搜索字符串 (AB) 中不包含 E 的剩余部分。字符串的其余部分位于 AB 上的原因是因为它从右到左搜索

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

关于ms-access - 提供起始位置时 InStrRev 的行为不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928573/

相关文章:

Java:使用 Desktop.print 打印 MS Access 数据库

vba - Excel - 从不同工作表和超链接上的单元格中提取数据

sql - 名称错误的无效括号

ms-access - MS Access 2010 VBA : mysterious compile error on custom LostFocus sub

java - 插入数据时出现问题

vba - XslCompiledTransform - 使用 XSLT 样式表转换 XML 时出现编译错误

excel - 如何将 Excel 中的组合框列表预先填充到用户窗体中?

VB.NET - 无法使用 SELECT 查询检索表上的第一个 ID

ms-access - 能否仅关闭 Access 中的某些警告?

c# - GridControl 不断抛出无效路径异常