VBA Вставка и ссылка Картинки - PullRequest
1 голос
/ 06 января 2020

Что я хочу сделать, так это вставить изображения в таблицу Excel. Поскольку есть много картинок, я хочу сделать это с помощью VBA Sub. Эти изображения регулярно обновляются (графики, которые меняются каждый раз, появляются новые точки данных). Каждой картинке также должен быть присвоен подготовленный суб. Текущее состояние проекта / Sub выглядит следующим образом:

  1. Изображения вставляются в таблицу Excel с использованием
    ActiveSheet.Pictures.Insert(path as String)
  2. Назначенный подготовленный Sub ImageClick для каждого изображения путем итерации по всем фигурам и использования
    ActiveSheet.Shapes(i as Integer).OnAction = "ImageClick"
  3. Чтобы поддерживать актуальность изображений, макрос, который создает рабочий лист и вставляет все изображения, вызывается каждый раз, рабочая книга будучи открытым.

На данный момент все работает отлично, но я думаю, что это не могло быть окончательным решением. С растущим количеством изображений время выполнения может превысить допустимые значения.

Мой вопрос: есть ли какая-либо функция или опция для автоматического Вставки и связывания изображений (например, опция, которую вы Можно ли выбрать, когда вы вручную вставляете изображения в Excel), чтобы они всегда были актуальными из-за ссылки на источник?

Другой вопрос: может ли быть проблема с назначением Sub ImageClick к этим картинкам (из-за ссылки)?

1 Ответ

0 голосов
/ 07 января 2020

Я нашел решение этой проблемы. Используя функцию Shapes.AddPicture, вы можете включить ссылку на исходный файл. Параметр LinkToFile должен быть установлен на msoTrue, а SaveWithDocument должен быть msoFalse, чтобы обеспечить автоматическое c обновление изображений (при повторном открытии книги). Поскольку все параметры необходимы, также необходимо определить точное положение изображения.

Присвоение макросов изображениям также возможно с помощью Shape.OnAction= <Sub_or_Function_Name as String>.

Пример кода приведен ниже:

'Sub to insert a linked picture into a Excel Worksheet
Public Sub LoadPicture()
    Dim path As String
    Dim ws As Worksheet
    Dim shc As Shape

    Set ws = ActiveWorkbook.Sheets(1)

    path = <Filepath as String>

    'All parameter are necessary
    Set shc = ws.Shapes.AddPicture(Filename:=path, LinkToFile:=msoTrue, SaveWithDocument:=msoFalse, _
                                Left:=100, Top:=100, Width:=100, Height:=100)

    'Assign a prepared Sub or Function to the inserted Shape.
    shc.OnAction = "Click"

End Sub

_________________________________________________________________________________

Private Sub Click()
    MsgBox "You dare to click me?"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...