Как скопировать рисунок (графический объект) в буфер обмена в VBA? - PullRequest
1 голос
/ 23 июля 2010

В Excel 2003 мне нужно скопировать графический объект (sheet.PageSetup.LeftFooterPicture) в буфер обмена.

Как я могу это сделать?

Ответы [ 5 ]

2 голосов
/ 23 июля 2010

В версиях Excel до 2007 года нельзя извлечь изображение из нижнего колонтитула. Вам нужно иметь оригинальный файл изображения.

См. этот предыдущий вопрос для более подробной информации

1 голос
/ 26 июля 2010

Как упоминалось ранее, проблема в том, что я не могу извлечь изображение из графического объекта (LeftFooterPicture). Смотря на ответы, которые я запутал в этой проблеме.

Имя файла должно содержать полный путь кфайл типа «C: \ myimage.jpg», но после сохранения листа он изменил имя файла на «myiamge» без пути и расширения.

, так что вот мой обходной путь:

  1. Перед событием «Сохранить» я сканирую все рабочие листы и получаю их Графику к тому времени, когда «Имя файла» имеет правильное содержимое (абсолютный путь, такой как C: \ mypic.jpg)
  2. Я создаюскрыть лист и добавить все изображения в качестве объектов Shape (Shapes.AddPicture с путем к изображению)

  3. Я связываю имя текущего рабочего листа и положение изображения с именем фигуры

  4. К тому времени, когда мне нужно скопировать изображение в cliapboard, я смотрю изображение на скрытой странице (shape.CopyPicture xlScreen, xlPicture)

1 голос
/ 23 июля 2010

Согласно MSDN a Graphic загружает изображение через файл (имя файла).Filename должен содержать полный путь к файлу, например «C: \ myimage.jpg», но после сохранения листа он изменил имя файла на «myiamge» без пути и расширения.Мне не удалось найти другую ссылку на файл в Excel.

Следующий код может вам помочь.

Sub yourMethod()
    copyGraphic Me.PageSetup.LeftFooterPicture
End Sub

Sub copyGraphic(srcGraphic As Graphic)
    Dim imagefolder As String
    Dim imageExtension As String
    Dim imagePath As String

    imagefolder = "D:\" '"
    imageExtension = ".gif"

    If InStr(1, srcGraphic.filename, ".") Then
        imagePath = srcGraphic.filename
    Else
        imagePath = imagefolder & srcGraphic.filename & imageExtension
    End If

    Me.Shapes.AddPicture imagePath, False, True, 10, 10, Round(srcGraphic.Width, 0), Round(srcGraphic.Height, 0)
End Sub

Возможно, вы захотите изменить Me. наНазвание вашего листа и лист назначения.

0 голосов
/ 30 июля 2010

Когда я пытаюсь скопировать что-то, что, кажется, не хочет копировать, я делаю Print Screen со своей клавиатуры и затем вставляю это в аксессуар PAINT. Оттуда вы можете вырезать все, что вам не нужно, а затем вырезать и вставить новое изображение в новый файл PAINT, чтобы оно было чистым. Вы можете сохранить его в формате .jpg для более удобного использования.

Надеюсь, это поможет.

0 голосов
/ 23 июля 2010
Private Sub Command1_Click()
Clipboard.Clear
Clipboard.SetData Picture1.Picture, vbCFBitmap
Command1.Enabled = False
End Sub

Таким образом, вы можете копировать изображения в буфер обмена.

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