gpt4 book ai didi

vba - 将 ActiveX 控件作为参数传递给 VBA 函数会导致 'type mismatch' 错误 : Need this for IntelliSense

转载 作者:行者123 更新时间:2023-12-04 20:00:39 25 4
gpt4 key购买 nike

有一个用户窗体,其中包含多个第 3 方 ActiveX 网格控件(iGrid by 10Tec)的实例。我们有一个 sub 使用相同的语句初始化每个网格:

Sub SetupIgrid(ig as iGrid)
ig.RowMode = True
ig.MultiSelect = True
ig.Appearance = igAppearanceFlat
ig.Editable = False
End Sub

我们不能将 iGrid 实例传递给这个子 - Excel VBA 总是在这样的调用中显示“类型不匹配”错误:
SetupIgrid igAuds

没有其他帮助。例如,我们可以像 Variant 或 Object 参数一样传递 iGrid,但是当我们尝试从中提取真正的 iGrid 类型时,我们会得到相同的类型不匹配:
Sub SetupIgrid(igObj as Object)
Dim ig as iGrid
Set ig = igObj

即使我们使用 hack 将 Long 指针传递给我们使用 ObjPtr 获得的 iGrid,然后使用 API CopyMemory 将其转换回 iGrid 类型,MS Excel VBA 也无法访问 iGrid 成员。

此任务的关键是在 SetupIgrid 子中拥有真正的 iGrid 对象以使用 IntelliSense 功能。现在我们可以将它作为对象(变体)或其他东西,但是当我们按下点时,确定这不会给我们智能感知列表。

最佳答案

这是因为控件不打算以这种方式传递到其主机之外。 “幕后”传递的是包装器的早期绑定(bind)“扩展器”控件,它反过来会导致您看到的类型不匹配。

这个问题有更全面的处理here from Microsoft.

关于vba - 将 ActiveX 控件作为参数传递给 VBA 函数会导致 'type mismatch' 错误 : Need this for IntelliSense,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12748897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com