微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

遍历有时为空变体时,为什么会出现运行时错误'13':类型不匹配的情况?

如何解决遍历有时为空变体时,为什么会出现运行时错误'13':类型不匹配的情况?

我正在使用Private Sub Worksheet_Change(ByVal Target As Excel.Range)事件(第一次)在单个工作表中构建动态验证列表。单元格A2和B2包含验证下拉列表;单元格B2取决于单元格A2;并且单元格A2取决于A列中超出A5的其余值

[在此列表中,B2中的最终选择将产生与其关联的其他值:类DB]

这是工作表更改后子例程的工作方式:

可变声明* variant,range,string

设置三个范围的对象A,B和C,其中B和C使用A(范围中最后使用的单元格)

检查目标的位置

  1. 如果目标位于第一列(A列),

1a)查看目标是否在第二行(A2)...如果是,则清除B范围内的内容调用function1,该函数返回过滤值及其数组的 array 活动工作表上的单元格位置>>将返回的数组分配给在后续调用中使用的变量variable1

  1. 如果目标位于第二列(B),

2a)查看目标是否在第二行(B2)...如果是,则清除C范围中的内容调用一个函数以根据B2中的内容填充C范围中的单元格;如果目标不在B2中,则应该没有其他事情发生

  1. 目标是否在其他地方

...什么都没发生


问题发生在调用function2处;当我观察变量/值更改时的中断时,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

解决方法

必须使用字符类型参数,并且必须将其声明为变量。

Dim myString As String
myString = target.Value
StateGPS = GetPlaceGPS(myString,SearchAll50) '<~~ Character type arguments must be used and must be declared as variables.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。