Как скопировать данные из динамически выбранного листа из другой книги VBA - PullRequest
0 голосов
/ 08 октября 2019

В листе у меня есть

  1. одно текстовое поле, которое заполняет выбранное пользователем имя файла Excel,
  2. одно поле со списком, которое заполняет выбранный пользователем лист из файла Excel в # 1

Затем, после того как пользователь выберет 1 + 2, я хочу, чтобы программа 3. скопировала данные с выбранного пользователем листа в выбранном пользователем файле Excel в рабочую книгу, над которой я работаю.

Код написан в модуле рабочей таблицы.

1 + 2 находятся в file_btn_Click () и на этом этапе все успешно. Оба элемента управления ActiveX находятся в Sheet3 в этой рабочей книге.

3 находится в sheet3_shcb_Change (). Он имеет «Ошибка времени выполнения 91: переменная объекта или переменная блока не установлена». И код, который имеет проблему: «Set copyfrom = targetwb.Worksheets (« Sheet1 »)»

Private Sub file_btn_Click()

 Me.sheet3_txtbox.Text = ""
 ThisWorkbook.Sheets("Sheet3").sheet3_shcb.Clear

Static myfile As String

Static targetwb As New Workbook
Dim sh As Worksheet



'Open file
myfile = Application.GetOpenFilename(Filefilter:="Report Files *.xlsx (*xlsx),", Title:="Browse for Excel Workbook File")
Set targetwb = Workbooks.Open(Filename:=myfile)

If myfile <> "False" Then

   Me.sheet3_txtbox.Text = myfile


Else
   MsgBox "Please select an excel file"
End If

'Populate sheet combo box
   ThisWorkbook.Sheets("Sheet3").sheet3_shcb.Clear
   For Each sh In targetwb.Worksheets
     Me.sheet3_shcb.AddItem sh.Name
   Next sh

   'Me.sheet3_shcb.Value = "--Select A Sheet From File--"


End Sub



Private Sub sheet3_shcb_Change()

Dim sh1        As String
Dim copyfrom   As Worksheet
Dim copyto_tmp As Worksheet

'Copy to temporary sheet
sh1 = Me.sheet3_shcb.Value
MsgBox "sh1 is " & sh1

Set copyfrom = targetwb.Worksheets("Sheet1")

Set copyto_tmp = ThisWorkbook.Sheets.Add(after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))

copyto_tmp.Name = "Temp_copyto_sh_process"


copyfrom.UsedRange.Copy
copyto_tmp.Range("A1").PasteSpecial Paste:=xlPasteAll

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...