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>这是我第一次碰到这样的情况,其中后期绑定代码的行为与早期绑定不同.
| 归档时间: |
|
| 查看次数: |
1921 次 |
| 最近记录: |