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

标签 vba excel activex parameter-passing type-mismatch

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

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 将 ObjPtr 获得的 Long 指针传递给 iGrid,然后使用 API CopyMemory 将其转换回 iGrid 类型,MS Excel VBA 也无法访问 iGrid 成员。

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

最佳答案

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

对此问题有更全面的处理here from Microsoft.

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

相关文章:

Excel自定义公式消除特殊字符

xml - 在 Excel VBA 中将图像 (jpg) 转换为 base64?

delphi - 如何检查包含我使用的 ActiveX 库的 dll 是否使用我的证书签名?

internet-explorer - Internet Explorer 何时/为何阻止安装(签名的)ActiveX 控件?

c# - 如何仅在代码中创建 AxHost [C#]

vba - 以管理员身份运行命令提示符命令

vba - 尝试根据单元格的值更改文本颜色时出现“Subscript out of range”错误

php - 将数据从 VBA (excel) 发送到 php,反之亦然

excel - Excel/Access 的替换或迁移策略

vba - 在每行后插入 n 个空白单元格的代码非常慢