gpt4 book ai didi

excel - 在同一函数中创建和编辑 OLEObject 时出现编译器错误

转载 作者:行者123 更新时间:2023-12-04 22:29:35 26 4
gpt4 key购买 nike

运行该函数时,它似乎在尝试添加项目之前没有创建 DropDown 菜单,因此它会遇到编译时错误:

Method or data member not found



突出显示 SomeNameToo标识符。

screenshot of compile error

如果我将两行“AddItem”放入另一个函数并在之后运行它,那么就没有问题,这两行被添加了。

有没有办法让它在运行以下代码之前创建对象?这为我节省了很多功能。
Sub hey()

ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, Left:=0, Top:=0, Width:=100, Height:=20).Name = "SomeNameToo"

Sheet1.SomeNameToo.AddItem "Item 1"
Sheet1.SomeNameToo.AddItem "Item 2"

End Sub

最佳答案

该对象在编译时不存在; SomeNameToo编译代码时不存在,只有在OLEObjects.Add之后方法已执行。
Add方法返回对正在创建的对象的引用。

您正在访问该对象,一次 - 在这里:

.Name = "SomeNameToo"

...然后物体就在空中,在该程序的范围内没有任何东西可以捕获它。

声明 OLEObject保存该引用的变量:
Dim oleControl As OLEObject
Set oleControl = ActiveSheet.OLEObjects.Add(...)

然后使用该对象:
oleControl.Name = "SomeNameToo"

或者,使用 With 捕获返回的引用 block - 那么你不需要一个局部变量:
With ActiveSheet.OLEObjects.Add(...)
.Name = "SomeNameToo"
End With

现在,您不能调用 AddItem反对那个对象,因为 OLEObject不是 ComboBox并且对 AddItem 一无所知方法。您想使用包装好的 MSForms ComboBox控制 - 那是 OLEObject.Object :
With ActiveSheet.OLEObjects.Add(...)
.Name = "SomeNameToo"
With .Object
.AddItem "Item 1"
.AddItem "Item 2"
End With
End With

或者,使用局部变量:
Dim oleControl As OLEObject
Set oleControl = ActiveSheet.OLEObjects.Add(...)
oleControl.Name = "SomeNameToo"

Dim msFormsControl As MSForms.ComboBox
Set msFormsControl = oleControl.Name
msFormsControl.AddItem "Item 1"
msFormsControl.AddItem "Item 2"

请注意,如果没有局部变量,您将针对 Object 进行编码。 ,这意味着所有内容都是后期绑定(bind)的,无法在编译时进行验证:错字将导致错误 438。

使用局部变量和声明的类型,一切都经过编译器验证,您可以在键入时获得 IntelliSense 协助。

关于excel - 在同一函数中创建和编辑 OLEObject 时出现编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54293481/

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