Программное добавление действия меню в Visio

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

Я могу сделать это (УСПЕШНО) вручную, используя редактор ShapeSheet -> View Sections -> Actions -> и настроив действие со значением Action =CALLTHIS("ThisDocument.myFunction",,Prop.IPAddress)

sub myFunction (shpObj as Visio.shape, strIPAddress as String) 
'working code with the functionsI want it to do. here I use the strIPAddress passed as an argument

Я пытаюсь автоматизировать это, создав макрос, который делает то же самое:

    Public Sub AddActionToShape()
     Dim vsoShape1 As Visio.Shape
     Dim intActionRow As Integer
     'Performs this action to the selected item
     Set vsoShape1 = Application.ActiveWindow.Selection(1)
     'create row in the action section (http://office.microsoft.com/en-gb/visio-help/HV080902125.aspx)
     intActionRow = vsoShape1.AddRow(visSectionAction, visRowLast, visTagDefault)
     'add action to the row (http://msdn.microsoft.com/en-us/library/office/ff765539(v=office.15).aspx)
'HERE IS THE PROBLEM     
**vsoShape1.CellsSRC(visSectionAction, intActionRow, visActionAction).FormulaU = """myFunction(vsoShape1, vsoShape1.Prop.IPAddress)"""**
     vsoShape1.CellsSRC(visSectionAction, intActionRow, visActionMenu).FormulaU = """My Function"""

End Sub

Мой вопрос:

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


person rlc    schedule 07.11.2014    source источник


Ответы (2)


Вы должны установить FormulaU точно в соответствии с содержанием, которое вы установили вручную. то есть к

CALLTHIS("ThisDocument.myFunction",,Prop.IPAddress)

Пытаться:

vsoShape1.CellsSRC(visSectionAction, intActionRow, visActionMenu).FormulaU = _
    "CALLTHIS(""ThisDocument.myFunction"",,Prop.IPAddress)"
person Nikolay    schedule 08.11.2014

Я закончил тем, что сделал это так, и это работает просто отлично.

Dim formula As String
formula = "=CALLTHIS([MODULE],,[ARG1],[ARG2])"
formula = Replace(formula, "[MODULE]", Chr(34) & "ThisDocument.myFunction" & Chr(34))
formula = Replace(formula, "[ARG1]", "Prop.IPAddress")
formula = Replace(formula, "[ARG2]", "Prop.Username")

'After the formula has been created, apply it to the row
shape.CellsSRC(visSectionAction, rowBeingEdited, visActionAction).formula = formula
person rlc    schedule 12.11.2014
comment
Я добавил этот код в надстройку (в Visual Studio), и этот метод не вызывается, когда я нажимаю пункт контекстного меню. Не могли бы вы помочь? - person genericuser; 02.06.2020