【问题标题】:Call UserForm_Initialize from Module从模块调用 UserForm_Initialize
【发布时间】:2019-01-07 02:38:49
【问题描述】:

我正在尝试从模块调用 Private Sub UserForm_Initialize。

UserForm_Initialize 按预期运行。这两种方法(在 Module1 中运行)都无法执行:

这个

Sub Change()
    Call UserForm_Initialize
End Sub

返回“编译错误:未定义子或函数。”

这个:

Sub Change()
    UserForm.Show
End Sub

返回“运行时错误‘424’:需要对象。

这是我的用户表单代码:

【问题讨论】:

  • 我在项目窗口的屏幕截图中看不到用户表单。通常它在模块之上。是否在不同的工作簿中?
  • targetrow=cells(9999,9) 应该是什么,单元格 (9999,9) 中是否有值?如果是这样,那么您需要说cells(9999,9).value,您可能还需要指出additem 的cells() 值
  • 我建议单步执行您的代码。当我遇到.Show 的问题时,通常是由_Initialize() 子中的错误引起的。

标签: excel vba userform


【解决方案1】:

您不应该在用户窗体之外运行UserForm_InitializeUserForm_Initialize 在 UserForm 被实例化时被调用。

相反,将您想要的命令放入 UserForm 代码模块中的公共过程中:

Public Sub ResetForm
    ' put stuff in here
End Sub

然后,如果您需要重置用户窗体(假设它的名称为UserForm1),请从常规模块中以这种方式调用代码:

Sub Change()
    UserForm1.ResetForm
End Sub

【讨论】:

  • +1 不仅不能从用户表单外部运行UserForm_Initialize,除非表单已经初始化,否则不可能从用户表单外部运行它;除此之外,UserForm_Initialize 是一个 Private 子。
  • 其实,如果你把它改成Public Sub(请不要!!),你可以从UserForm外部运行UserForm_Initialize,如果UserForm还没有实例化,它会实例化自身以运行代码。可能不是任何人想要的。
  • 回想起来,这是有道理的,因为您不像在课堂上那样 Set 用户窗体 - 我仍然觉得很奇怪。谢谢指正!
  • 简短回答:您可以声明一个变量Dim fUserForm As UserForm1,然后设置它Set fUserForm = New UserForm1,而不是仅仅使用UserForm1。这将保留默认实例,唯一运行的实例是您明确设置的实例。
猜你喜欢
  • 2012-12-07
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 2010-10-02
  • 2011-04-05
  • 2015-12-19
  • 2015-11-17
  • 1970-01-01
相关资源
最近更新 更多