0

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

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

感谢您的任何帮助!

4

1 回答 1

1

首先,您应该使用在 DblClick 事件中分配的公共变量 vVal。公共变量持续存在,用户表单值不存在。

接下来,您必须告诉 VBA 该值是一个工作簿,Workbooks(vVal)

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

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

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

注意 Worksheets 前缀的句点

于 2015-04-08T18:33:48.407 回答