有一个用户窗体,其中包含多个第 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 功能。现在我们可以将它作为对象(变体)或其他东西,但是当我们按下点时,确定这不会给我们智能感知列表。