子函数里面的用户表单

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

[1]:http://i.stack.imgur.com/IJcfO.jpg

这是我的代码

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 

UserForminput详细信息后,我正在调用UserForm1.Show子function。 问题:一旦我发布UserForm1.Show是否可以在子函数中执行nextline ? 如果是这样,怎么样?

一旦你已经发出命令UserForm1.Show在子,子停止运行,窗体上的代码(初始化,显示,等待用户在窗体上的input等)将运行。

这并不意味着其余的被忽略或者被丢弃。 剩下的代码只是被搁置了。 一旦表单被closures,你的子代码中的其他代码应该运行。 然而,在启动UserForm的时候,焦点从你的子Form转移开来, Form的所有代码和事件都被“滑入”了。

如果希望在显示表单之前激活表单(并select第一行),则应将UserForm1.Show行移至子form的末尾,然后运行Windows("DB.xlsm").Activate Rows("1:1").Select之前。

如果你希望这种情况发生,那么你必须:

  1. 使form 无模式或
  2. 您必须将其余的代码转移到显示窗体后运行的位置(例如UserForm_Initialize)。

所以,上面两个select的代码是:

替代scheme1

 '... 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 

笔记:

  • modalfunction不仅确保您的代码的其余部分运行。 另外 – 也许是最重要的 – 这允许用户同时与表单和表单交互。 表格不再有专门的重点。 阅读上面引用的链接,并确保这是你想要的。
  • 将剩余的代码从你的子文件移动到UserForm_Inizialize只是一个命题。 还有其他的地方,你可以把代码,如UserForm_Activate或者你甚至可以决定其余的事情发生,因为第一次甚至发生在UserForm