userof里面的子函数

时间:2016-08-06 12:51:08

标签: excel excel-vba vba

我在工作簿中创建了以下userform。

[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

UserForm1.Show中输入详细信息后,我在子函数内调用UserForm。 问题:我发布UserForm1.Show后,是否可以在子功能中执行nextline ?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:2)

在子程序中发出命令UserForm1.Show后,子程序停止运行,表单上的代码(初始化,显示,等待表单上的用户输入等)将会运行。

这并不意味着其余部分被忽视或被忽略。代码的其余部分仅被搁置。表单关闭后,您的子代码中的其余代码应该运行。然而,当您启动UserForm时,焦点会从您的潜点移开,Form的所有代码和事件都会“滑入”中间。

如果您希望在显示form之前激活工作表(并选择第一行),那么您应该将行UserForm1.Show移动到子行的末尾并运行行{{ 1}}和Windows("DB.xlsm").Activate之前。

如果您希望在表单显示后发生这种情况,那么您必须:

  1. 制作Rows("1:1").Select modeless
  2. 您必须将其余代码转移到显示表单后运行的位置(例如UserForm_Initialize)。
  3. 所以,上述两种选择的代码是:

    备选方案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上。