我的模块代码调用userform:
PreInfo.Show
我的用户格式代码:
Public Sub PreInfo_Initialize()
Dim Invoice, Name, Model, Crank, MyValue1, StrokeL As Variant
'Dim ListBox1 As ListBox
Dim c As Range
Dim oneControl As Object
'Empty Text Boxes and Set Focus
For Each oneControl In PreInfo.Controls
Select Case TypeName(oneControl)
Case "TextBox"
oneControl.Text = vbNullString
'Case "ListBox"
'oneControl.AddItem "Test"
End Select
Next oneControl
With lbTest
.AddItem Item:="2 Cylinders" '3 different syntax used as test to isolate issue
.AddItem "3 Cylinders"
.AddItem ("5 Cylinders")
End With
Invoice.TextBox.SetFocus 'Activate?
End Sub
我的模块代码没有触发我的userform initialize sub,因此该子程序中没有任何内容运行。我无法弄清楚为什么会这样。我非常感谢任何帮助!
当此代码运行时,会弹出userform,但不会添加任何列表框项
答案 0 :(得分:5)
Userform_Initialize事件由模块中调用的这样的行触发:
Load Userform1
为了再次触发它,您需要卸载用户窗体(而不是简单地隐藏它)。这可以在模块中的加载调用之后完成:
Unload Userform1
或Userform代码中的任何位置:
Unload Me
请注意,卸载调用也会触发事件初始化和 QueryClose ( QueryClose 是当按下右上角的关闭按钮时也会触发),所以我建议你不要使用初始化。相反,在加载调用之后,在同一模块中添加初始化代码(如果从多个位置调用它,则创建一个单独的子代码。)
Sub LoadThatUserform
Load Preinfo
'All textboxes are loaded with their value set to vbnullstring, _
unless you specified otherwise in the Properties box.
With ThatUserform.lbTest
'Answering this test
.AddItem Item:="2 Cylinders" 'Here you used the parameter name. _
It's entirely optional, which is why the one below _
also works. It's necessary, however, if you wanna skip _
an optional parameter on a procedure call.
.AddItem "3 Cylinders"
.AddItem ("5 Cylinders") 'This will theoretically create a _
run-time error: a procedure call either outside of a Call _
statement or not setting a value to a variable or property _
doesn't require parentheses.
End With
'After loading, show the form
Preinfo.Show
'Showing, if not as modeless, stops code execution for the user _
to make changes to the form. Once he presses a button _
or whatever, and the form is hidden, code will resume. _
After you grab every form data you need, just call Unload.
Unload Preinfo
End Sub
最后但并非最不重要的是,如果您正在运行无模式表单(让我们的代码在显示时在后台运行),您需要使用激活事件为了运行代码。事件序列是:
答案 1 :(得分:2)
我遇到了同样的问题,并找到了一个非常简单的解决方案。
在您的情况下,而不是使用
Public Sub PreInfo_Initialize()
使用
Public Sub UserForm_Initialize()
答案 2 :(得分:0)
当用户点击userform上的“继续”按钮时,我使用userform.hide,该按钮关闭用户窗体并将用户窗体输入打印到工作表中
发生的事情是您的userform永远不会从内存中卸载。 Hide
仅将其从视图中删除。
这意味着它仅在您第一次在该Excel实例中运行用户窗体时初始化。
您可以使用
来防止这种情况发生unload me
或
End
而不是UserForm.Hide
,具体取决于您的其他代码。您还可以使用UserForm_Activate
方法而不是UserForm_Initialize
方法。
要填充ListBox,请使用:
lbTest.AddItem "3 Cylinders"
With
声明之外的等。
答案 3 :(得分:0)
我已经弄清楚了。长话短说,我的模块需要以下代码:
Userform.Userform_Activate 'THIS IS THE NEW CODE
Userform.Show 'existing code, unchanged
表示用户表单在打开之前激活(调用“initialize”,然后显示用户表单以供用户更改)。
Userform.Show应该提示这个激活子运行,但是我不是出于任何原因。这解决了这个问题,直到我确定为什么没有像调用Userform.Userform_Activate那样调用它。
答案 4 :(得分:0)
你必须保持语法UserForm_Initialize()才能实现它
干杯