【发布时间】:2020-10-02 21:29:50
【问题描述】:
我正在使用Private Sub Worksheet_Change(ByVal Target As Excel.Range) 事件(第一次)在单个工作表中构建动态验证列表。单元格 A2 和 B2 包含验证下拉列表;单元格 B2 取决于单元格 A2;并且单元格 A2 取决于 A 列中超出 A5 的其余值
[在此列表中,B2 中的最终选择将产生与其相关的其他值:DB-like ]
这就是工作表更改后子例程的工作方式:
变量声明* variant, range, string
设置三个范围对象 A、B 和 C,其中 B 和 C 使用 A(范围中最后使用的单元格)
检查目标的位置
- 如果目标位于第一列(A 列),
1a) 查看目标是否在第二行 (A2)...如果是,则清除 B 范围内的内容,调用 function1,返回过滤值及其过滤值的 array活动工作表上的单元格位置 >> 将返回的数组分配给在后续调用中使用的变量 variable1
- 调用函数1
- 变量1 = 函数1
- 调用函数2(
Target,变量1)
- 如果目标在第二列 (B),
2a) 查看目标是否在第二行(B2)...如果是,则清除C范围内的内容,调用函数根据B2中的内容填充C范围内的单元格;如果目标不在 B2 中,则不应该发生其他任何事情
- 如果目标在其他任何地方
...什么都没发生
问题发生在调用函数2;当我观察变量/在值更改时添加中断时,function1 和 variable1 似乎可以正确接收值,但是当调用 function2 时,它会抛出运行时错误并告诉我 variable1 为空...
我不知道在初始执行期间对范围所做的更改是否算作对工作表的后续更改,或者它们是否都算作相同的更改
我已经成功让 A2 和 B2 中的下拉列表工作,但 B2 中的更改并没有促进最终更改,因此重新配置了代码...重新配置的代码产生了一个奇怪的错误追逐
我确实尝试过停用/激活 enableEvents,(对我来说也是新的)但它没有改变结果...下面是来自 function2 (arg1, arg2) 的代码...如果一切正常,我不会不知道为什么会返回错误
Call StateFinder 'calls the function that builds address
SearchAll50 = StateFinder 'sets the new searchable array to it's value
Call ListBuilder(Target, SearchAll50) 'builds a list of values in the target cell
'a variable set that stores the Target's address
'-----------------------------------------------
StateGPS = GetPlaceGPS(Target.Value, SearchAll50) 'the Target address will be set to variable
GetPlaceGPS 抛出错误
Function GetPlaceGPS(ByVal SelectedPlace As String, ByVal MadeList As Variant) As String
'the returned address will then be used to set the range used to search cities
Dim i As Long
For i = LBound(MadeList) To UBound(MadeList)
If MadeList(i)(0) = SelectedPlace Then
'compares the first value of the ith row to the selected state
'once the state is found GetStateGPS is set to the sheet address
GetPlaceGPS = MadeList(i)(1)
'exit the function once the value is properly set
Exit For
End If
Next i
End Function
【问题讨论】:
-
函数中的哪一行抛出错误?你想要 ByRef MadeList() As String
-
嗨@QHarr,我注意到 SOMETIMES 函数难以将值分配给 SearchAll50 变体,这意味着它传递的是空的/未分配的GetPlaceGPS() 函数的变体 当 For 循环在 GetPlaceGPS() 内部开始时,启动循环的行是错误突出显示的行。充其量,我可以推断出该函数正试图通过数组的 LBound (....这是 0)循环到错误清空数组的 Ubound (...也假定为 0)代码在这里中断并且之前分配的值都没有得到值。
标签: arrays excel vba worksheet-function