Напомним выбор пользователя в нескольких модулях

Мой текущий код использует событие 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

Обратите внимание на период, который префиксы рабочих листов

Другие вопросы по тегам