【问题标题】:VBA Command button to open Userform returns 1004 errorVBA 命令按钮打开用户窗体返回 1004 错误
【发布时间】:2019-11-06 05:47:05
【问题描述】:

在一个 excel 项目中,我有一个包含数据的工作表、一个从该工作表中提取数据的用户表单,以及一个用于粘贴用户表单数据的工作表。

我在数据表中创建了一个应该打开用户表单的按钮。作为参考,我的用户表单的名称是 UserForm1。当我单击命令按钮时,我收到 424 错误Object required。我将不胜感激任何帮助或澄清,似乎我的类/实例混淆了?

代码如下:

Private Sub blocksSorter_Click()
     Load UserForm
     UserForm.Show
End Sub

表单本身在同一个 VBA 项目中,并且是项目中唯一的表单。我的 UserForm1 代码通常是这样的:

Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    code
End Sub

Private Sub UserForm_Initialize()
    code
End Sub

只有当我这样做时,表单才会显示,并将我的 UserCode subs 从 UserForm 更改为 UserForm1

Private Sub blocksSorter_Click()
     Load UserForm1
     UserForm1.Show
End Sub

【问题讨论】:

  • UserForm1.Show 实际上是正确的,所以你可以这样。而且你真的不需要先加载它。
  • 但是我需要更换我的潜艇吗? Private Sub UserForm_Initialize() 到 Private Sub UserForm1_Initialize()`?
  • 不,子使用类名......这就是它应该工作的方式。我通常将我的表单命名为 frmTransfer 以避免混淆。
  • 但在不更改潜艇的情况下,单击按钮时我得到一个Application-defined or object-defined error
  • 你不是在“显示”类UserForm,你正在显示一个名为UserForm1的类的实例

标签: excel vba userform


【解决方案1】:

尽管我的表单名称是 UserForm1,但我的标题却是别的东西。在 braX 的帮助下,我有以下几点:

Private Sub blocksSorter_Click()
     Load UserForm1
     UserForm1.Show
End Sub

我的表单属性现在如下:

Name: UserForm1
Caption: UserForm1

我的用户窗体代码保持不变。

【讨论】:

    【解决方案2】:

    开始一个新的 VBA 项目。

    添加表单。

    将表单命名为frmOne

    双击表单并将MsgBox "Hello" 添加到该事件。

    添加另一个表单。

    为表格命名frmTwo

    双击第二个表单并将frmOne.Show 添加到该事件。

    运行第二个窗体,然后单击它,它应该会打开 frmOne。然后点击frmOne,就会出现msgbox。

    请注意,每个表单都有一个名为UserForm_Click() 的子例程,但它们是不同的。这有助于清除它吗?我不知道还能怎么向你解释。

    【讨论】:

      猜你喜欢
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多