我阅读以下内容: Compile error Method or data member not found 但是,我不允许在工作计算机上下载任何内容。因此,我试图通过显示带有下拉日期的用户窗体来覆盖人们的错误,以供人们在计算机上没有日历日期选择器选项时使用。
有什么办法可以覆盖编译错误?我尝试了以下代码:
Private Sub UserForm_Initialize()
On Error GoTo EnterDateManually
If IsDate(ActiveCell.Value) Then
Me.MonthView1.Value = ActiveCell.Value
End If
EnterDateManually:
Enter_Date.Show
End Sub
但是它仍然给我编译错误。编译错误突出显示了MonthView1,因为在这台计算机上,我删除了缺少的参考库,因为我在此计算机上没有该库,并且我确定其他用户也不会在其计算机上拥有它。
我知道当您遇到数字错误时,您可以覆盖它(尽管您应该先尝试修复它:-),但是似乎无法覆盖编译错误吗?还是... 谢谢您的帮助
答案 0 :(得分:3)
Me.MonthView1
在编译时不存在,因此MonthView1
不是Me
的成员-因此,找不到 Method或数据成员
On Error
语句是可执行的:到它们开始运行时,代码早就已经被编译了-您不能使用该语句来处理编译错误。
编译错误表示您的代码无法编译:某处存在非法或格式错误的语句,指定了Option Explicit
,未声明变量,...或被引用类型库丢失。
通过删除<MISSING>
类型的库,您是在告诉VBA“该项目实际上并不需要此库”-如果 没有任何内容,一切都会很好在项目中 did 需要该库。
在大多数情况下,您可以后期绑定类型库,并在缺少该库时在运行时(而不是在编译时)炸毁-然后,可以使用On Error
语句来处理它。 / p>
但是,您不能在设计时后期绑定需要显示在UserForm
上的MSForms控件,因为VBA需要在 design上加载该控件时间,以呈现表单设计器。
拥有MSForms控件的唯一方法是在运行时加载该库,该控件显示何时可以加载其库,而何时不存在该库(我从未尝试过)?时间,并在运行时有条件地生成控件。现在,后期绑定的一个问题是您不能在编译时绑定事件处理程序,而VBA不允许您在运行时绑定事件处理程序,因此您的动态控件不能具有事件处理程序。但是我认为您仍然可以检查其状态,因此,如果您真的想要这样做,这可能是可行的。