Нет простого способа скопировать растровое изображение прямо из UserForm
в рабочую таблицу.На рабочем листе нет Image
объектов, как у формы и при добавлении изображений (либо в Shape, либо с помощью метода ActiveSheet.Pictures.Insert
, принятый параметр является именем файла.
При этом вы можете создатьвременный файл, чтобы сохранить изображение, которое у вас есть в пользовательской форме, и использовать этот файл для вставки изображения в нужное вам место.
Я создал рабочую книгу с пользовательской формой «TestForm» с одним элементом управления изображениями с именем «Image1 "на нем.
Следующий код в обычном модуле делает свое дело:
Sub Test()
Dim wb As Workbook
Dim ws As Worksheet
Dim formname As String
Dim tempfile As String
'Create new workbook:
Set wb = Workbooks.Add
Set ws = wb.Sheets(1)
'Setting form name in new sheet. Using row 1 in this example.
ws.Range("C1").Value = "TestForm"
'Retrieve the "found" value
formname = ws.Range("C1").Value
'Save the picture and get the location:
tempfile = SavePictureFromForm(formname)
'Navigate to the correct location, since we need it selected for Pictures.Insert
ws.Activate
Range("C1").Select
'Add the picture to the sheet:
ActiveSheet.Pictures.Insert tempfile
'Clean up the file system:
DeleteTempPicture tempfile
End Sub
Функция, которая сохраняет изображение из формы, при условии, что оно находится в элементе управления изображениями с именем" Image1 "Также возвращает расположение к приведенной выше подпрограмме:
Function SavePictureFromForm(formname As String) As String
Dim tempfilepath As String
Dim tempfilename As String
'Location + filename:
tempfilepath = "C:\Temp\"
tempfilename = "temppicture.jpg"
'Get the correct userform:
Set Obj = VBA.UserForms.Add(formname)
'Save the picture and return it's location:
SavePicture Obj.Image1.Picture, tempfilepath & tempfilename
SavePictureFromForm = tempfilepath & tempfilename
End Function
Удалите временный файл:
Public Sub DeleteTempPicture(filename As String)
'Delete the temporary file throught FSO:
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO
.DeleteFile filename
End With
Set FSO = Nothing
End Sub
Обратите внимание, что выше есть ZERO обработка ошибок. ЕслиНеверное имя формы в ячейке, это приведет к сбою. Если форма не имеет элемента управления «Изображение1» с типом изображения, она сбоит, если вы передадите недопустимое имя файла подпрограмме удаления, онаавария.
Однако - он делает то, что вы упомянули: создайте новую рабочую книгу, добавьте изображение из пользовательской формы в исходной рабочей книге в новую рабочую книгу (на листе 1) на основе имени пользовательской формы.Поскольку этот вопрос не является более подробным и ваш точный вариант использования неизвестен, этого должно быть более чем достаточно для начала работы.