我当前的代码使用Workbook_Open事件来运行一个用户形式,询问用户想要做什么,如果他们选择" A"它使用列表框填充userform,该列表框显示所有打开的workbooks.name(s)。使用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
感谢您的帮助!
答案 0 :(得分:1)
首先,您应该使用在DblClick事件中指定的公共变量vVal。公共变量仍然存在,用户形式值不会。
接下来,您必须告诉VBA该值是工作簿Workbooks(vVal)
最后,在With
内,您应该只对With
对象执行操作。
因此,如果MYDATA是vVal工作簿中的工作表:
With Workbooks(vVal)
.Worksheets("MYDATA").Range("D2:D103").Select
End With
请注意工作表前缀的句点