在多个模块中调用用户选择

Recall User Selections Within Multiple Modules

我当前的代码使用 Workbook_Open 事件到 运行 一个询问用户想要做什么的用户表单,如果他们 select "A" 它填充一个用户表单显示所有打开的 workbooks.name(s) 的列表框。使用 ListBox_DblClick 事件,我希望用户能够双击他们希望激活的工作簿名称以执行 运行 一些涉及从 [=27= 复制信息的任务](导出到具有半不可能命名系统的临时文件夹的工作簿)到我知道其名称和位置的工作簿中。我似乎无法在双击事件后调用列表框值。有什么指点吗?

Userform2 中的代码:

Option Explicit
Public Vval As String
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Vval = Me.ListBox1.Value
Call AUTOMATEME
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

双击事件调用的子程序(我遇到问题的子程序)是:

Sub AUTOMATEME()

With Listbox1.Value
Worksheets("MYDATA").Range("D2:D103").Select
Selection.Copy
Workbooks("ALL_Data.xlsm").Worksheets("FORMULAS").Select
Range("G2").Select
ActiveSheet.Paste
Sheets("FORMULAS").Select
ListBox1.Value.Select
Range("E2:E103").Select
Selection.Copy
Workbooks("ALL_Data.xlsm").Worksheets("FORMULAS").Select
Range("G2").Select
Range("E2").Select
ActiveSheet.Paste
End With
End Sub

感谢您的帮助!

首先,您应该使用在 DblClick 事件中分配的 public 变量 vVal。 Public 变量持续存在,用户窗体值不存在。

接下来,你要告诉VBA这个值是一个工作簿,Workbooks(vVal)

最后,在 With 中,您应该只对 With 对象执行操作。

因此,如果 MYDATA 是 vVal 工作簿中的工作表:

With Workbooks(vVal)
   .Worksheets("MYDATA").Range("D2:D103").Select
End With

注意工作表前面的句点