Excel VBA Userform Изображение в ячейку листа - PullRequest
0 голосов
/ 02 октября 2018

У меня есть вопрос.Можно ли сохранить изображение из пользовательской формы рабочей книги во вторую рабочую книгу в ячейку.

Мой код создает новую рабочую книгу с новым листом с именем newsheet.Там я хочу вставить определенные изображения по значению ячейки в диапазон, в котором я сейчас нахожусь.Пока у меня что-то вроде этого:

lrow = newsheet.cells(rows.count,1).end(xlup).rows
for i = 1 to lrow
 if newsheet.range("C" & i) <> "" then 
   'search for name of userfrom, the userfrom name is the same as cell value
     'and insert that picture from that userform into "C" & i
  end if
  next i

1 Ответ

0 голосов
/ 02 октября 2018

Нет простого способа скопировать растровое изображение прямо из 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) на основе имени пользовательской формы.Поскольку этот вопрос не является более подробным и ваш точный вариант использования неизвестен, этого должно быть более чем достаточно для начала работы.

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