Изменить положение фигуры текста в MS Visio

У меня есть схема, в которой текст Visio (состоящий из линейной формы) расположен неправильно. Вместо середины он падает далеко вправо.

Вместо этого я хотел бы, чтобы все они были сосредоточены.

Поскольку я совершенно не знаком с VBA Visio, я записал макрос, чтобы обойти основные свойства кода в этих обстоятельствах.

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

https://learn.microsoft.com/en-us/office/client-developer/visio/change-the-name-and-view-the-id-of-a-shape

Я решил использовать код только для тех фигур, у которых ID выше конкретного значения. К сожалению, следующий код:

Sub SLDalter()
Dim DiagramServices As Integer
DiagramServices = ActiveDocument.DiagramServicesEnabled
ActiveDocument.DiagramServicesEnabled = visServiceVersion140 + visServiceVersion150

Dim UndoScope As Long
UndoScope = Application.BeginUndoScope("Modify Control")

With Application.ActiveWindow.Page.Shapes.ItemFromID(>1104)
.CellsSRC(visSectionControls, 0, visCtlX).FormulaU = "Width*0.6"
.CellsSRC(visSectionControls, 0, visCtlY).FormulaU = "Height*1"
End With

Конец сабвуфера

Не работает.

Я пробовал и другие решения, такие как:

http://visguy.com/vgforum/index.php?topic=887.0

https://bvisual.net/2021/01/02/reference-visio-shapes/

но они тоже не работали.

Как выполнить пакетное перемещение текста с помощью простого кода VBA в Visio?

ОБНОВЛЯТЬ:

Благодаря этому запросу мне удалось получить идентификатор формы и тип.

Как получить тип фигуры в Visio с помощью VBA?

а ситуация выглядит так:

Теперь я хотел выбрать их все в соответствии с этим запросом: http://visguy.com/vgforum/index.php?topic=6685.0

с кодом следующим образом:

Sub Eselde()
Dim Vshp As Visio.Shape
Dim IP As Long
For Each Vshp In ActivePage.Shapes
If Vshp.Name Like "*Fibre Cable" Then
.CellsSRC(visSectionControls, 0, visCtlX).FormulaU = "Width*0.6"
.CellsSRC(visSectionControls, 0, visCtlY).FormulaU = "Height*1"
End If
Next

End Sub

но в строке:

   .CellsSRC(visSectionControls, 0, visCtlX).FormulaU = "Width*0.6"

Я получаю сообщение об ошибке:

Недействительная или неполная ссылка

Интересно, почему этот код не может работать в этих обстоятельствах, тогда как он работал для одного идентификатора.

ОБНОВЛЕНИЕ II:

Я заметил, что после такого подхода:

Dim Vshp As Visio.Shape

For Each Vshp In VPage.Shapes
If Vshp.Name = "Fibre Cable" Then
Debug.Print Vshp.ID & " - " & Vshp.Master.Name
End If
Next
End Sub

учитывается только первая фигура, тогда как у меня не менее 30.

Да, я хочу переместить их всех на фиксированное расстояние

Geographos 29.03.2023 21:18

Вы снова придумываете код. В двух строках, начинающихся с «.CellsSRC», используйте «Vshp.CellsSRC».

Paul Herber 03.04.2023 19:34

Откуда вы взяли строчку кода «Если Vshp.Name Like «*Fibre Cable» Then»? В VBA нет If... Like... Then!

Paul Herber 03.04.2023 19:37

Загрузите и просмотрите Visio SDK. Полный пример кода VBA.

Paul Herber 03.04.2023 19:38

@PaulHerber, почему? Я использовал его несколько раз в VBA Excel

Geographos 04.04.2023 13:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
208
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пожалуйста, попробуйте этот код

Sub bbb()
Dim sl As Selection, ShpObj As Shape, vl As Single
Set sl = ActivePage.CreateSelection(visSelTypeByLayer, , "Connector") ' create selection from 'Connector' layer
For Each ShpObj In sl ' iterate items in selection
    vl = ShpObj.CellsSRC(visSectionControls, 0, visCtlX) - 1 ' get X text position coordinate to left per inch
    ShpObj.CellsSRC(visSectionControls, 0, visCtlX).FormulaU = Chr(34) & vl & Chr(34) ' move text position
Next
End Sub

Как этот код работает на моей стороне.

Move connectors text position

Обновлено

Интересно, почему этот код не может работать в этих обстоятельствах, тогда как он работал для одного идентификатора.

Пожалуйста, добавьте префикс к переменной формы, например Vshp.CellsSRC(visSectionControls, 0, visCtlX).FormulaU = "Width*0.6"

К сожалению, это не работает, я думаю, что хотел бы иметь что-то с опцией ItemFromID

Geographos 30.03.2023 16:39

Я попробовал ваш код, но похоже, что он не соответствует моим идентификаторам фигур.

Geographos 30.03.2023 17:12

Да, это разъемы. Я знаю, что это должно быть целое число, но я хотел бы иметь условие, которое определяло бы их использование, когда идентификатор выше, чем, например, 1104.

Geographos 30.03.2023 17:49

Не могу ли я установить такие условия, как если ID выше, чем что-то?

Geographos 30.03.2023 18:44

@Geographos - вы не можете составить грамматику кода по мере продвижения. Посмотрите примеры кода из Visio SDK.

Paul Herber 30.03.2023 23:45

Обновил мой запрос, сможете ли вы помочь на этот раз?

Geographos 31.03.2023 17:36

Другие вопросы по теме