Database Excel:将用户输入到另一个模块

Database Excel:将用户输入到另一个模块,database,vba,excel,input,Database,Vba,Excel,Input,我有一个宏,它填充一个列表框,告诉我当前在我的计算机上打开的所有工作簿名称,其中包含一个双击事件,以选择我希望激活以运行其他过程的工作簿的名称。我尝试了几种方法,以在第二个过程中调用列表框中的选择,但我似乎没有正确地使用代码,并且不断出现错误。有什么建议吗 我目前的工作内容: Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim BName As Long For BName = 0 To Me.Lis

我有一个宏,它填充一个列表框,告诉我当前在我的计算机上打开的所有工作簿名称,其中包含一个双击事件,以选择我希望激活以运行其他过程的工作簿的名称。我尝试了几种方法,以在第二个过程中调用列表框中的选择,但我似乎没有正确地使用代码,并且不断出现错误。有什么建议吗

我目前的工作内容:

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim BName As Long

For BName = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(BName) Then
    Me.ListBox1.Selected(BName) = True
    With Me.ListBox1.Selected(NName)
    Call Q
    End If

Unload Me
End Sub
Private Sub UserForm_Initialize()
    Dim wkb As Workbook
    With Me.ListBox1
        For Each wkb In Application.Workbooks
        .AddItem wkb.Name
    Next wkb
End With
End Sub
子问题:

Public Sub Q()

Dim BName As Object

With ListBox1.Selected(BName).Value

Workbooks(BName).Activate
With Active.Workbooks
.Worksheets("MYDATA").Range("D2:D103").Select
Selection.Copy
Workbooks("MARCH1158(1).xlsm").Worksheets("FORMULAS").Select
Range("G2").Select
ActiveSheet.Paste
Sheets("Interface").Select
Sheets("FORMULAS").Select
ListBox1.Value.Select
Range("E2:E103").Select
Range("E103").Activate
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.ActivateNext
Range("E2").Select
ActiveSheet.Paste
Sheets("Interface").Select
Sheets("FORMULAS").Select
ActiveWindow.SelectedSheets.Visible = False
End With
End With
End Sub

如果我正确理解了这个问题,我认为最好的办法是创建过程Q来获取一个参数,并将参数设置为列表框中的选定值。因为我们没有Q的代码,所以我建立了一个相对简化的过程来开始

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim BName As Long

    For BName = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(BName) Then
            Q (Me.ListBox1.List(BName))
        End If
    Next BName

    Unload Me

End Sub

Private Sub UserForm_Initialize()
    With Me.ListBox1
        .AddItem "Hello"
        .AddItem "Goodbye"
        .AddItem "Saluations"
    End With
End Sub

Sub Q(strSelection As String)
       Workbooks(strSelection).Activate
       ' Enter the rest of the code here     
End Sub

非常感谢@user3561813!My current Q sub::Dim BName As Object WBBNName.激活W/Active.Workbooks.WSMYDATA.Range2:D103.Select Selection.复制WBDecisions.WSA1.Select RangeG2.选择ActiveSheet.粘贴工作表1.选择工作表A1.选择ListBox1.Value.选择Range2:E103.选择Range103.激活应用程序.CutCopyMode=选择错误。复制ActiveWindow.ActivateNext Range2。选择ActiveSheet。粘贴SheetsB2。选择SheetsA1。选择End With End With End Sub。如果我使用Sub Q strSelection作为字符串,然后将其与现有Q合并,则此代码是否适用?我尝试了几种不同的方法来捕获选择值,并用公共函数等将其传递给Q sub,但它们都返回了对象错误。@user3794203是否可以将sub Q的代码作为编辑添加到原始帖子中。在注释部分很难阅读代码。另外,请说明您希望代码Q做什么,以及列表框选择是如何关联的。谢谢很抱歉刚刚重新编辑过,现在更清晰了。谢谢你的帮助@user3794203需要提及的几点:1代码背后的逻辑在语法上是错误的。ListBox1.SelectedBname.Value将返回错误。.Selectedint属性根据是否选择该项返回True/False。要访问该索引处的值,可以使用'Listbox1.ListBName'。也就是说,如果您像我上面描述的那样修改Q`代码,并且代码带有一个参数,那么您可以根据参数名称引用工作簿。我将编辑上面的代码,以便您可以看到它的外观。