我在工作簿中创建了以下userform。
这是我的代码
Sub Macro6()
Dim lines As Long
Dim letter As String
Dim no As String
Dim count As Integer
Dim i As Integer
Dim xRow As Long
Dim TargetFiles As FileDialog
Dim xDirect$, xFname$, InitialFoldr$
Dim DataBook As Workbook, OutBook As Workbook
Dim DataSheet As Worksheet, OutSheet As Worksheet
count = Sheets.count
If count > 1 Then
For i = 1 To Sheets.count
If Sheets(i).Name <> "Sheet1" And Sheets(i).Name <> "Execute" And Sheets(i).Name <> "DBCONNECTORS" And Sheets(i).Name <> "Cil Connectors" Then
Sheets(i).Select
Set OutBook = ActiveWorkbook
Set OutSheet = OutBook.Sheets(i)
Dim myValue, myValue1, myValue2, myValue3, myValue4, Myvalue5, myValue6, myValue7, myValue8, myValue9, myValue10, myValue11 As Variant
UserForm1.TextBox1.Value = OutSheet.Name
UserForm1.Show
Windows("DB.xlsm").Activate
Rows("1:1").Select
在UserForm1.Show
中输入详细信息后,我在子函数内调用UserForm
。
问题:我发布UserForm1.Show
后,是否可以在子功能中执行nextline ?如果是这样,怎么样?
答案 0 :(得分:2)
在子程序中发出命令UserForm1.Show
后,子程序停止运行,表单上的代码(初始化,显示,等待表单上的用户输入等)将会运行。
这并不意味着其余部分被忽视或被忽略。代码的其余部分仅被搁置。表单关闭后,您的子代码中的其余代码应该运行。然而,当您启动UserForm
时,焦点会从您的潜点移开,Form
的所有代码和事件都会“滑入”中间。
如果您希望在显示form
之前激活工作表(并选择第一行),那么您应该将行UserForm1.Show
移动到子行的末尾并运行行{{ 1}}和Windows("DB.xlsm").Activate
之前。
如果您希望在表单显示后发生这种情况,那么您必须:
Rows("1:1").Select
modeless或所以,上述两种选择的代码是:
备选方案1
form
备选方案2
'... only copied over the last few rows or your above sub
UserForm1.TextBox1.Value = OutSheet.Name
UserForm1.Show (False)
Windows("DB.xlsm").Activate
Rows("1:1").Select
注意:
'... in the code module of the UserForm us the following
Private Sub UserForm_Initialize()
Windows("DB.xlsm").Activate
Rows("1:1").Select
End Sub
功能不仅可以确保代码的其余部分运行。此外 - 也许最重要的是 - 这允许用户同时与工作表和表单进行交互。表格不再具有专属焦点。阅读上面引用的链接,确保这是你想要的。modal
只是一个命题。还有其他地方可以放置代码,例如UserForm_Inizialize
,或者您甚至可以决定其余的地方,因为第一个甚至发生在UserForm_Activate
上。