我有一些 Excel 2013 和 Excel 2017 电子表格,它们广泛使用 VBA,从 Oracle 下载和处理数据。我们最近迁移到 Office 365(64 位),因此我必须更新这些电子表格才能在新环境中工作。大多数迁移工作正常......但是在执行一些将过滤器应用于记录集的代码时,我总是遇到崩溃。
此代码在 Excel 2017(32 位)中完美运行。
Dim thisContractID As Long
While outputSheet.Range("CONTRACT_LIST").Cells(2, col).value <> 0
thisContractID = outputSheet.Range("CONTRACT_LIST").Cells(2, col).value
quantityData.Filter = "SALES_CONTRACT_ID=" & thisContractID '<= Crash here. ThisContractID is a Long, and value exists in the recordset.
While Not quantityData.EOF
earliestDate = quantityData![EFFECTIVE_FROM]
latestDate = quantityData![EFFECTIVE_TO]
For thisDate = startDate To endDate
If thisDate >= earliestDate And thisDate <= latestDate Then
dateOffset = thisDate - startDate + 4
outputSheet.Range("CONTRACT_LIST").Cells(1, col).Offset(dateOffset, 0).value = quantityData![DAILY_QUANTITY_GJ]
outputSheet.Range("CONTRACT_LIST").Cells(1, col).Offset(dateOffset, 11).value = quantityData![DAILY_MAX_GJ]
End If
Next thisDate
quantityData.MoveNext
Wend
col = col + 1
Wend
在 locals 窗口中,我可以看到记录集有 5 个字段(预期),“SALES_CONTRACT_ID”是第一个字段,具有 adVarNumeric 类型。不确定要提供哪些其他信息 - 我使用 adOpenStatic 光标和 adLockReadOnly 锁。
我试过的:
- 将 thisContractID 设置为 LongLong。
- 在应用过滤器之前添加 quantityData.MoveFirst。
- 将过滤器更改为 filter = """SALES_CONTRACT_ID=" & thisContractID & """" (在第一次迭代时计算为 "SALES_CONTRACT_ID=723"。=> 运行时错误 '3001'
- 将过滤器更改为 filter = "SALES_CONTRAACT_ID='" & thisContractID & "'" (在第一次迭代时评估为 SALES_CONTRAACT_ID='723';仍然崩溃。
- 更改对 Microsoft ActiveX Data Objects 2.8 库(原为 6.1 库)的库引用
我不知道还能尝试什么!任何帮助表示赞赏。