gpt4 book ai didi

ms-access - vbCompareMethod 的枚举成员中缺少 vbUseCompareOption

转载 作者:行者123 更新时间:2023-12-03 05:14:41 25 4
gpt4 key购买 nike

许多在线帮助资源(包括 Microsoft 的帮助资源)(针对 example )针对接受 vbCompareMethod 的函数,指出有 4 个可能的值:

  • vbUseCompareOption = -1 '似乎不存在
  • vbBinaryCompare = 0
  • vbTextCompare = 1
  • vbDatabaseCompare = 2

但我刚刚检查了 Access 2000、2007 和 2016,它们似乎都没有在对象浏览器中列出 vbUseCompareOption 。如果我设置了 Option Explicit,则会收到编译错误,指出 vbUseCompareOption 是一个 undefined variable 。

这是否意味着任何使用常量 vbUseCompareOption 而没有 Option Explicit 的 VBA 可能会得到意外结果?

这是 VBA 早期版本的倒退,或者可能是 Access 的特性,或者只是帮助中广泛分布的错误?

最佳答案

看来你是对的,因为vbUseCompareOption并不作为枚举vbCompareMethod的成员存在

vbComapreMethod

那么,当您尝试使用它时会发生什么?正如您所发现的,当使用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参数

enter image description here

关于ms-access - vbCompareMethod 的枚举成员中缺少 vbUseCompareOption,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51461197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com