【问题标题】:VBA: Userform initialize method not being hit when userform initializes - UserForm.UserForm_Activate solution is not workingVBA:用户表单初始化时未命中用户表单初始化方法 - UserForm.UserForm_Activate 解决方案不起作用
【发布时间】:2018-09-16 16:04:41
【问题描述】:

我的工作表上有一个按钮,单击时我有一个分配的宏,它调用 userform.show。见下文:

Sub newjoin()
UserForm.UserForm_Activate
NewJoinerEntry.Show
End Sub

我在上面的帖子中添加了 UserForm.UserForm_Activate 看着你。

首先,我在 UserForm.UserForm_Activate 运行时错误“424”上遇到错误:需要对象。

另外,在我的用户表单中,我有:

Public Sub UserForm_Initialize()
Dim cntr As Integer
cntr = Application.WorksheetFunction.CountA(Sheets("SITES").Range("B2:B65536"))

Combosite.Clear
For obt = 2 To cntr
Me.Combosite.AddItem Cells(obt, 5)
Next obt
End Sub

我正在使用它来填充组合框值,但它没有发生

在用户表单上,我还有其他代码单击命令按钮以提交表单结果,只有在用户表单初始化时组合框获取数据时,这一切都很好。

【问题讨论】:

  • 你不需要把这行:UserForm.UserForm_ActivateNewJoinerEntry.Show 应该可以正常工作,如果它是用户窗体的正确名称。
  • 我在加载用户窗体初始化时遇到问题。实际上,一旦表单初始化,我想用数据加载组合框。 NewJoinerEntry.Show 一切正常
  • 您是否在模块中创建了一个名为UserForm_Initialize() 的子?如果是,那当然是行不通的。您需要打开用户窗体,在空白区域单击鼠标右键,选择“显示代码”选项,然后选择该用户窗体的事件初始化。你应该把代码放在那里。
  • 没有。我在我的用户表单和模块中有 UserForm_Initialize(),我正在调用用户表单 - NewJoinerEntry.Show,因为它在工作表上的按钮上运行。
  • 在 userform_Initialize 中,我想从一系列单元格中生成组合框值。

标签: excel vba


【解决方案1】:

您可以像这样在范围内循环并在 ComboBox 中添加值:

Private Sub UserForm_Initialize()
    Dim rng As Range
    Dim SelectedRange As Range
    Dim LastRow As Long
    Dim sh As Worksheet

    Set sh = ThisWorkbook.Sheets("SITES")
    LastRow = sh.Range("B" & Rows.Count).End(xlUp).Row
    Set SelectedRange = sh.Range("G2:G" & LastRow)

    ComboBox1.Clear

    For Each rng In SelectedRange
        ComboBox1.AddItem rng.Value
    Next rng

End Sub

此代码将根据 B 列在工作表中设置动态范围。正如我在原始代码中看到的那样,您需要 G 列中的值。因此,SelectedRange 正在获取 G 列中的值并将其放入它在一个 ComboBox 中。

【讨论】:

  • 感谢拉斐尔的回复。我在 LastRow = sh.Range("B" & Rows.Count).End(xlUp).Row 上收到运行时错误“9”下标超出范围
  • 您需要验证您的B列。我没有看到此代码有任何错误,我之前测试过。
猜你喜欢
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多