Получение пристыкованных трафаретов Visio, в отличие от трафарета Document, в VBA - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь создать макрос Visio, который будет алфавитизировать мастера в первом закрепленном трафарете в документе.Ниже мой код.Однако Set vsoDoc = Visio.Documents.ItemFromID (0), по-видимому, ссылается не на закрепленный трафарет, а на трафарет документа.Как получить пристыкованный трафарет?Любая помощь очень ценится!

Dim i As Integer
Dim vsoDoc As Visio.Document
Dim vsoDocNew As Visio.Document
Dim dictMasters As New Scripting.Dictionary
Set vsoDoc = Visio.Documents.ItemFromID(0)    'Existing Stencil

Set vsoDocNew = Visio.Documents.AddEx("New Stencil.vss", , visAddStencil)     'New Sorted Stencil

'Get the names of the existing masters and sort them

For i = 1 To vsoDoc.Masters.Count
    Call dictMasters.Add(vsoDoc.Masters(i).Name, vsoDoc.Masters(i))
Next

list = dictMasters.Keys()

Dim First As Integer, Last As Long
Dim x As Long, j As Long
Dim Temp As String

First = LBound(list)
Last = UBound(list)
For x = First To Last - 1
    For j = x + 1 To Last
        If list(x) > list(j) Then
            Temp = list(j)
            list(j) = list(x)
            list(x) = Temp
        End If
    Next j
Next x

'Drop the existing masters into the new stencil based on the sorting

For i = 1 To dictMasters.Count
   Call vsoDocNew.Masters.Drop(dictMasters(list(i - 1)), 0, 0)
Next

Я надеюсь изготовить новый трафарет с теми же мастерами, что и пристыкованный трафарет, но в алфавитном порядке.Однако созданный новый трафарет состоит из алфавита трафарета документа.Visio.Documents.ItemFromID (0) возвращает трафарет документа, но я хочу получить первый закрепленный трафарет.Как получить пристыкованный трафарет?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Решено!Заменив присвоение переменной vsoDoc приведенным ниже кодом, я получил желаемый результат.

For i = 1 To ActiveWindow.windows.Count
    If ActiveWindow.windows(i).Type = visDockedStencilBuiltIn Then
        Debug.Print ActiveWindow.windows(i).Document.Name
        Set vsoDoc = ActiveWindow.windows(i).Document
        Debug.Print vsoDoc.Name
    End If
Next
0 голосов
/ 25 января 2019

Вы можете пройтись по списку ActiveWindow.Windows и найти любое окно, у которого .Type = visDockedStencilBuiltIn или вы можете пойти по .Document.Name, и я думаю, что вы можете проверить, находится ли трафарет впереди, проверив, если (.WindowState И visWSActive) = True

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

...