【发布时间】:2018-01-01 04:35:32
【问题描述】:
在不同的工作簿中运行相同的代码时,我遇到了解决类型不匹配的问题。假设工作簿 1 是原始工作簿,工作簿 2 是新工作簿。
工作簿 1 和 2 具有相同的代码(如下),其中 Listbox_Refresh 子调用 GetAccountRef() 函数。该代码在 Workbook 1 中运行良好,但在 Workbook 2 中类型不匹配,我无法弄清楚原因。
我检查了两个工作簿中GetAccountRef() 的VarTypes,它们是不同的。
对于工作簿 1
-
这会按预期产生 8204 (vbArray + Variant):
Debug.Print VarType(GetAccountRef()) -
这会如预期的那样产生 8(字符串):
Debug.Print VarType(GetAccountRef(0))
对于工作簿 2
-
这导致 0(空):
Debug.Print VarType(GetAccountRef()) -
这会导致错误类型不匹配:
Debug.Print VarType(GetAccountRef(0))
我要运行的功能是:
Function GetAccountRef() As Variant
On Error Resume Next
Dim Cell As Range
Dim Row_I As Range
Set Row_I = Sheet5.Range("9:9") '<- ERROR: This range does not contain "Date"
Dim Counter As Integer
Counter = 0
Dim Date_Ref() As Variant
For Each Cell In Row_I
If Cell = "Date" Then
ReDim Preserve Date_Ref(Counter)
Date_Ref(Counter) = Cell.Address
GetAccountRef = Date_Ref
Counter = Counter + 1
End If
Next Cell
On Error GoTo 0
End Function
我正在尝试在 For 循环中使用此功能,如下所示:
Dim ListedBnk As Variant
For Each ListedBnk In GetAccountRef()
ListedBnk = Replace(ListedBnk, "9", "7")
.ComboBox1.AddItem Range(ListedBnk)
.ComboBox2.AddItem Range(ListedBnk)
Next ListedBnk
谢谢!
【问题讨论】:
-
删除 On Error Resume Next - 它在哪里以及如何失败?
-
由于 GetAccountRef 的值最终取自 Row_I 范围,我怀疑 Workbook2 中的范围为空。无论如何,我同意上面的评论,即应该删除错误捕获,并且您应该单步执行代码以查看失败的确切位置。
-
@TonyM 是的,确实是这样,希望我早点看到你的评论!