Exc*_*bie 4 excel vba dictionary
我所做的是将字典放入Sub Routine中的数组中
这就是定义
Dim Arr() As Variant
ReDim Arr(0 To Dict.Count - 1)
For c= 0 To Dict.Count - 1
Arr(c) = Dict.Keys(c) ' <~~~~~~ Error here
Next c
Run Code Online (Sandbox Code Playgroud)
编译说
运行时错误451:属性let过程未定义,属性get过程未返回对象.
它非常适合
Public Sub SubRoutine(Dict As Scripting.Dictionary)
Run Code Online (Sandbox Code Playgroud)
但没有
Public Sub SubRoutine(Dict As Object) –
Run Code Online (Sandbox Code Playgroud)
<Solution>
你做这个
Dim Arr() As Variant
ReDim Arr(0 To Dict.Count - 1)
For c = 0 To Dict.Count - 1
Arr(c) = Dict.Keys(c)
Next c
Run Code Online (Sandbox Code Playgroud)
但是像这样的循环是非常不必要的.这是什么Arr = Dict.Keys
.所以,而不是上述,只是做
Dim Arr As Variant
Arr = Dict.Keys
Run Code Online (Sandbox Code Playgroud)
额外的好处是,这会使错误消失.
</Solution>
但为什么错误发生在代码的后期绑定版本而不是早期绑定?
<Educated guess>
通过早期绑定,编译器知道该.Keys
方法不带参数 - 它只返回一个数组.所以它解释Dict.Keys(c)
为{returned array}(c)
并返回c
返回数组的th元素.
使用后期绑定,我猜对象容器不知道该.Keys
方法不接受参数(又称参数),因此c
它作为参数发送给它.但是没有定义这样的getter(或setter),因此错误.为了解决这个问题,你可以通过说明强制它不向Keys
方法发送参数Dict.Keys()(c)
,这会带来{returned array}(c)
行为.
</Educated guess>
这是我第一次碰到这样的情况,其中后期绑定代码的行为与早期绑定不同.