我在工作簿中创建了以下用户窗体。

excel - 子功能内的userform-LMLPHP

这是我的代码

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").ActivateRows("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/

10-10 18:51