Visio VBA Изменить изображение - PullRequest
0 голосов
/ 19 ноября 2018

Попытка изменить изображение человека на диаграмме организации Visio. Я могу изменить его, вручную нажав «Изменить изображение» и просмотрев, но метод ChangePicture выдает ошибку.

Sub changeShapePicture(ByRef thisShape As Visio.Shape, filepath as string)

If Dir(filepath) <> "" Then
    Debug.Print "File Exists"
    thisShape.ChangePicture(filepath)
    Else
    Debug.Print "Picture File Doesn't Exist"
End If

Я получаю сообщение об ошибке «Недопустимый целевой объект для этого действия».

Метод говорит, что возвращает соотношение высоты и ширины изображения как Double.

Также пробовал

dim myRatio as double
myRatio = thisShape.ChangePicture(fullPicPath)

и получите ту же ошибку.

Попытка записи макроса не принесла никакого полезного кода.

Большинство организационных блоков имеют изображения, импортированные при создании организационной диаграммы. Однако из-за странной договоренности о том, кто кому отчитывается, нужно добавить несколько ячеек во вторичной операции, и это то, что я пытаюсь автоматизировать.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Разобрался.Решение для изменения изображения в предварительно определенных формах Org Chart состоит в том, чтобы использовать Add On

Sub changeShapePicture(ByRef thisShape As Visio.Shape, filePath as string)

dim sendTheseKeys as string

sendTheseKeys = filePath + "{ENTER}"
ActiveWindow.Select thisShape, visDeselectAll + visSelect
Dim adn As Visio.Addon
Set adn = Visio.Addons("OrgC11")
SendKeys sendTheseKeys,False
adn.Run "/cmd=ChangePicture"

end sub

Отлично работает сейчас.

0 голосов
/ 28 ноября 2018

Я попытался воспроизвести его и получил ту же ошибку, но я заработал, когда попытался изменить фигуру, которая была помещена, потянув изображение непосредственно из проводника в visio.

Кажется, что форма имеетбыть картиной для начала, чтобы иметь возможность обмениваться ею.Проверьте, является ли фигура, которую вы пытаетесь заменить, изображением (см. Прикрепленное изображение).Я не знаю, как выглядит ваш график или какова его структура, но убедитесь, что вы выбрали правильную фигуру, возможно, изображение является подформой другой фигуры (группы).

Sheet.2 is the Firefox Logo

При копании немного глубже и попытке найти тип фигуры с помощью shape.type мы видим, что первая фигура (sheet.2) имеет тип 4 (ForeignType) и копание глубже с shape.foreigntype, что это объект visTypeBitmap.
Вторая фигура имеет тип 3 и является visTypeShape, нативная форма Visio.

Так как похоже, что единственный жизнеспособный вариант предназначен для замены фигуры, я попробовал следующее:

  • Импортировать изображениена activePage
  • Создан новый трафарет
  • Перетащите форму в трафарет
  • используйте shape.ReaplaceShape для замены старой формы

--> В этом случае происходит сбой Visio, но я опубликую свой код, как только он заработает.Также вполне вероятно, что есть гораздо более простой способ для этого ....

...