Напомним выбор пользователя в нескольких модулях
Мой текущий код использует событие Workbook_Open для запуска пользовательской формы, которая спрашивает, что пользователь хочет сделать, если они выбирают "А", он заполняет пользовательскую форму списком, в котором отображаются все открытые имена (и) workbooks.name. Используя событие ListBox_DblClick, я хочу, чтобы пользователь мог дважды щелкнуть по имени книги, которую он хочет сделать активным, для запуска некоторых задач, которые включают копирование информации с одного листа (книги, которая экспортируется во временную папку с полу-невозможная система имен) в рабочую книгу, имя и местонахождение которой я знаю. Я не могу получить значение списка, которое будет вызвано после события двойного щелчка. Есть указатели?
Код в пользовательской форме2:
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
Спасибо за любую помощь!
1 ответ
Во-первых, вы должны использовать открытую переменную vVal, назначенную в событии DblClick. Открытые переменные сохраняются, пользовательские значения - нет.
Затем вы должны сказать VBA, что значение представляет собой рабочую книгу, Workbooks(vVal)
Наконец, внутри With
вы должны выполнять только действия на With
объект.
Так что, если MYDATA - это лист в книге vVal:
With Workbooks(vVal)
.Worksheets("MYDATA").Range("D2:D103").Select
End With
Обратите внимание на период, который префиксы рабочих листов