执行我的 select 查询时出错 - 参数类型错误,超出可接受范围
getting error while executing my select query - Arguments are of wrong type , are out of acceptable range
我在 VBA 中执行 SQL select 查询时出错。
错误:参数类型错误,超出可接受范围,或者在一个 another.Please 中找到我的代码
Public Function Get Invoices()
Dim objConn As Object
Dim objRecordSet As Object
Dim objRecCmd As Object
strQuery = "Select Distinct [RECHNR] from [Sheet1$]"
strFolderPath = "\test1"
Set objConn = CreateObject("ADODB.Connection")
Set objRecCmd = CreateObject("ADODB.Command")
objConn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFolderPath & ";Extended Properties=""Excel 12.0;IMEX=1""")
Set objRecordSet = CreateObject("ADODB.Recordset")
objRecordSet.CursorLocation = adUseClient
objRecCmd.ActiveConnection = objConn
objRecCmd.CommandText = strQuery
objRecordSet.Open objRecCmd, , adOpenKeyset, adLockOptimistic
End Function
行中出现错误 - objRecordSet.CursorLocation = adUseClient
您的代码引用了以下内容:
adUseClient
adOpenKeyset
adLockOptimistic
Excel 无法识别这些枚举(枚举的缩写 - 您可能会将它们视为常量或特定数字的代码字 - Google“什么是枚举”以获取更多信息) , 所以它会假设它们是变量。
如果您在代码中使用 Option Explicit
,Excel 会告诉您这一点。
因为这些变量不存在,Excel 将它们解释为 0。您将在下面看到,0 不是您想要在任何情况下使用的值。您需要使用正确的 number/code 让您的脚本请求正确的东西。
您有以下三种选择:
选项 1
您可以创建与枚举同名的变量。您可以将以下内容放在代码的开头:
adUseClient = 3
adOpenKeyset = 1
adLockOptimistic = 3
这确实有效,但不推荐 - 虽然不太可能,但理论上 Microsoft 可以更改他们的编码并且您的脚本会开始请求非常奇怪的东西,直到您意识到并采取修复措施。
选项 2
您可以用实际值替换对枚举的使用。用上面的值交换枚举名称将解决问题。但同样,如果 Microsoft 在 ADO 的更高版本中进行更改,混乱可能随之而来。
选项 3
在项目的引用中引用必要的库。转到工具 > 参考和 tick/select:
Microsoft ActiveX 数据对象记录集x.x库
在这样做的过程中,Excel 变为 'aware' 真实值 - 来自图书馆 - 因此应始终使用正确的值。
我在 VBA 中执行 SQL select 查询时出错。 错误:参数类型错误,超出可接受范围,或者在一个 another.Please 中找到我的代码
Public Function Get Invoices()
Dim objConn As Object
Dim objRecordSet As Object
Dim objRecCmd As Object
strQuery = "Select Distinct [RECHNR] from [Sheet1$]"
strFolderPath = "\test1"
Set objConn = CreateObject("ADODB.Connection")
Set objRecCmd = CreateObject("ADODB.Command")
objConn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFolderPath & ";Extended Properties=""Excel 12.0;IMEX=1""")
Set objRecordSet = CreateObject("ADODB.Recordset")
objRecordSet.CursorLocation = adUseClient
objRecCmd.ActiveConnection = objConn
objRecCmd.CommandText = strQuery
objRecordSet.Open objRecCmd, , adOpenKeyset, adLockOptimistic
End Function
行中出现错误 - objRecordSet.CursorLocation = adUseClient
您的代码引用了以下内容:
adUseClient
adOpenKeyset
adLockOptimistic
Excel 无法识别这些枚举(枚举的缩写 - 您可能会将它们视为常量或特定数字的代码字 - Google“什么是枚举”以获取更多信息) , 所以它会假设它们是变量。
如果您在代码中使用 Option Explicit
,Excel 会告诉您这一点。
因为这些变量不存在,Excel 将它们解释为 0。您将在下面看到,0 不是您想要在任何情况下使用的值。您需要使用正确的 number/code 让您的脚本请求正确的东西。
您有以下三种选择:
选项 1
您可以创建与枚举同名的变量。您可以将以下内容放在代码的开头:
adUseClient = 3
adOpenKeyset = 1
adLockOptimistic = 3
这确实有效,但不推荐 - 虽然不太可能,但理论上 Microsoft 可以更改他们的编码并且您的脚本会开始请求非常奇怪的东西,直到您意识到并采取修复措施。
选项 2
您可以用实际值替换对枚举的使用。用上面的值交换枚举名称将解决问题。但同样,如果 Microsoft 在 ADO 的更高版本中进行更改,混乱可能随之而来。
选项 3
在项目的引用中引用必要的库。转到工具 > 参考和 tick/select:
Microsoft ActiveX 数据对象记录集x.x库
在这样做的过程中,Excel 变为 'aware' 真实值 - 来自图书馆 - 因此应始终使用正确的值。