- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
许多在线帮助资源(包括 Microsoft 的帮助资源)(针对 example )针对接受 vbCompareMethod
的函数,指出有 4 个可能的值:
vbUseCompareOption = -1
'似乎不存在vbBinaryCompare
= 0vbTextCompare = 1
vbDatabaseCompare = 2
但我刚刚检查了 Access 2000、2007 和 2016,它们似乎都没有在对象浏览器中列出 vbUseCompareOption
。如果我设置了 Option Explicit
,则会收到编译错误,指出 vbUseCompareOption
是一个 undefined variable 。
这是否意味着任何使用常量 vbUseCompareOption
而没有 Option Explicit
的 VBA 可能会得到意外结果?
这是 VBA 早期版本的倒退,或者可能是 Access 的特性,或者只是帮助中广泛分布的错误?
最佳答案
看来你是对的,因为vbUseCompareOption
并不作为枚举vbCompareMethod
的成员存在
那么,当您尝试使用它时会发生什么?正如您所发现的,当使用Option Explicit
时,您会收到编译错误,因为该名称的变量未定义。
如果您不使用Option Explicit
(通常是个坏主意),则会在运行时创建一个Variant
类型且值为Empty的变量
。我做了一个实验来看看会发生什么:
TL:DR - 是的,您可能会得到意想不到的结果(始终使用二进制比较)
我创建了两个模块,一个使用Option Compare Binary
,另一个使用Option Compare text
。我使用 StrComp
作为使用 Compare 参数的测试函数。
模块一
'Option Explicit
Option Compare Text
Sub DemoText()
Dim a As String, b As String
a = "AAA"
b = "aaa"
Debug.Print "Option Comapre Text"
Debug.Print "Text", "Binary", "Omitted", "vbUseCompareOption"
Debug.Print StrComp(a, b, vbTextCompare), StrComp(a, b, vbBinaryCompare), StrComp(a, b), StrComp(a, b, vbUseCompareOption)
End Sub
模块二
'Option Explicit
Option Compare Binary
Sub DemoBinary()
Dim a As String, b As String
a = "AAA"
b = "aaa"
Debug.Print "Option Comapre Binary"
Debug.Print "Text", "Binary", "Omitted", "vbUseCompareOption"
Debug.Print StrComp(a, b, vbTextCompare), StrComp(a, b, vbBinaryCompare), StrComp(a, b), StrComp(a, b, vbUseCompareOption)
End Sub
测试
Sub Demo()
DemoText
DemoBinary
End Sub
结果
Option Comapre Text
Text Binary Omitted vbUseCompareOption
0 -1 0 -1
Option Comapre Binary
Text Binary Omitted vbUseCompareOption
0 -1 -1 -1
如果您为其分配值 -1
,则会收到运行时错误 5“无效的过程调用或参数”
因此,vbUseCompareOption
不存在,请使用值 -1
创建它(或者仅使用 Compare:=-1
调用函数>) 正如帮助所示,失败了。
让 VBA 将其创建为变量(值为 Empty
)没有效果。始终应用二进制比较。
AFAICT,使用Option Compare
设置的唯一方法是在函数调用中省略Compare参数。
关于ms-access - vbCompareMethod 的枚举成员中缺少 vbUseCompareOption,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51461197/
我是一名优秀的程序员,十分优秀!