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?如果是这样,怎么办? 最佳答案
在子窗口中发出命令UserForm1.Show
后,子窗口将停止运行,并且表单上的代码(初始化,显示,等待用户在表单上输入等)将运行。
这并不意味着其余的被忽略或被丢弃。其余代码只是被搁置了。表单关闭后,子代码中的其余代码应运行。但是,在您启动UserForm
时,焦点将转移到您的子对象上,并且Form
及其所有代码和事件都“在它们之间滑动”。
如果要在显示form
之前激活工作表(并选择第一行),则应将行UserForm1.Show
移动到子行的末尾,并在行之前运行行Windows("DB.xlsm").Activate
和Rows("1:1").Select
。
如果您希望这种情况在显示表单后发生,那么您将必须:
制作form
modeless或
您必须将其余代码移至显示表单后即可运行的位置(例如UserForm_Initialize)。
因此,以上两种选择的代码是:
选择1
'... 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
选择2
'... 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
,或者甚至可以决定其余的发生,因为第一个偶数出现在UserForm
上。关于excel - 子功能内的userform,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38804477/