Изменение цвета фигуры в Visio - PullRequest
0 голосов
/ 28 января 2020

Нужна помощь!

Я относительно осведомлен, когда дело доходит до макросов, VBA, скриптов и т. Д. c., Но кодирование Visio для меня - новый монстр.

Короче говоря, у меня есть макет карты склада с простыми квадратными формами, отмечающими местоположения продуктов, и я хочу раскрасить квадраты на основе их Prop._VisDM_F2 элемента данных. Пока что мой код работает, но только для 1-й фигуры в группе квадратов, но иногда основная фигура состоит из 1 квадрата, иногда 6, и всего, что между ними.

Я узнал, что # в "Shapes ( # )" выбирает, какой квадрат будет изменен, но я хочу, чтобы они ALL изменились. Я попытался подсчитать количество отдельных фигур в каждой мастер-форме, чтобы использовать переменное целое число как # , но это не сработало.

Конечно, такой простой Задача не может быть такой сложной, поэтому я, наверное, просто что-то упускаю. Любая помощь будет принята с благодарностью!

'' '

Dim selectObj As Visio.Shape

For Each selectObj In ActiveWindow.Selection
If selectObj.CellExistsU("Prop._VisDM_F2", Visio.VisExistsFlags.visExistsAnywhere) Then
selectObj.Shapes(1).Cells("Fillforegnd").FormulaU = visWhite
End If
Next

End Sub

' ''

1 Ответ

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

Фигуры могут иметь подформы, доступ к которым осуществляется через свойство Shapes в соответствии с вашим кодом (обратите внимание, что большинство коллекций Visio основаны на 1, а не на 0).

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

Sub ApplyFillToAll()

Dim shp As Visio.Shape

For Each shp In ActiveWindow.Selection
    If shp.CellExistsU("Prop._VisDM_F2", Visio.VisExistsFlags.visExistsAnywhere) Then
        SetFill shp, "RGB(255,0,0)"
    End If
Next

End Sub

Public Sub SetFill(ByRef shpIn As Visio.Shape, fillFormula As String)

Dim shp As Visio.Shape

For Each shp In shpIn.Shapes
    shp.Cells("FillForegnd").FormulaU = fillFormula
    SetFill shp, fillFormula
Next

End Sub

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

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

https://visualsignals.typepad.co.uk/vislog/2007/11/looping-through.html

...