В листе у меня есть
- одно текстовое поле, которое заполняет выбранное пользователем имя файла Excel,
- одно поле со списком, которое заполняет выбранный пользователем лист из файла 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