DropMany with Autoconnectmany Method sample needed

Started by frank, December 13, 2011, 06:33:02 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

frank

Hi champs

can someone please provide a vb sample of DropMany together with AutoConnectMany Method that drops one specific Master from stencil to the active page connecting to the currently selected shape?

If this is too simple for you (it´s magic for me already), then the follwoing would be my personal world wonder:
Same functionality but from right click (I know how to extend the actions menu from within the shapesheet) from the current selected shape, passing the amount (1-10) to the script. Is that possible at all?

Your help is much appreciated!
Best Regards
Frank

Jumpy

To your personal wonder:

Use the Callthis function to call VBA-Code from the (action cells in the) ShapeSheet. You can pass arguments along:

http://msdn.microsoft.com/en-us/library/ms406651(v=office.12).aspx

hth Jumpy

frank

Danke Jumpy, nah dran, aber das würde heissen, ich muss 10 macros schreiben?
Gibt es eine Möglichkeit die Nummer aus dem Actionmenue an ein einzelnes Macro zu übergeben?
Wie muss das MAcro dafür aussehen?
Best Regards
Frank

Jumpy

Normal CALLTHIS without Arguments:

Action.Row_1: =CALLTHIS("MYMACRO")

Sub MYMacro(shp as Visio.Shape)

End Sub



CALLTHIS with further Arguments:

User.MyNumber: =5
User.MyString: ="BlaBlub"
Action.Row_1: =CALLTHIS("MYMACRO",User.MyNumber,User.MyString)

Sub MYMacro(shp as Visio.Shape,i as Integer, s as String)

End Sub


hth Jumpy

frank

Hi Jumpy

Thanks for your patience and the provided sample. This is very much of help but I think, please correct me if I am wrong, that this doesn´t solve my issue.

When right click on a shape I have an action menu "add child(s)" that allows to call a macro to add 1, 2, 3, or more shapes from specific Master to the currently selected shape and passing the value (1-10) the user selects in the context menu.

So I need the macro reading the string (1-10) from the contextmenu not vise versa.

Best Regards
Frank

Jumpy

OK, damit ich's verstehe doch in Deutsch.

Du könntest im Action Menü 10 Einträge machen, die jeweils dasselbe Makro starten, aber mit einem anderen Parameter, der dann sagt, wieviel Shapes (1-10) erzeugt werden sollen. Sähe dann so aus:
Erzeuge_1
Erzeuge_2
Erzeuge_3
usw.

Alternativ könntest du nur einen Action-Eintrag machen, der ein Makro ohne Parameter aufruft, in welchem dann als erstes mit einer Inputbox nach der Anzahl der zu erzeigenden Shapes gefragt wird.

Die dritte Möglichkeit wäre beim Kontextmenü einen Eintrag zu haben, der dann aber nur 10 Untermenüeintrage öffntet und jeder dieser Untereinträge startet das Macro mit der Zahl der zu erzeugenden Shapes.
Diese dritte Möglichkeit funzt aber nicht mehr mit dem Action-Bereich eines Shapes sondern erfordert das die benötigte Menüstruktur selber (via Code) erstellt wird. Da hab ich aber keine Ahnung, wie das ginge, zumal das ab Visio2010 eh anders gehandhabt werden müsste, als mit den älteren Versionen.

Vielleicht hab ich aber immer noch nicht verstanden was genau du willst.

frank

Jumpy, Deine Geduld sollte mit einem (virtuellen) Orden belohnt werden! :)

Wir nähern uns dem ganze mit sieben Meilenstiefeln.

1. Ich habe einen Master in dessem ActionMenu ein Eintrag ("Add Child" - BeginGroup=True)
2. Darunter finden sich dann 10 Einträge als Submenu (FlyoutChild=True) in denen einfach nur die Zahlen 1-10 stehen.
3. Bei Click auf einer dieser Einträge wird ein Macro aufgerufen (Public Sub AddChild) und der angeklickte Wert aus dem ContextMenu soll nun übergeben werden
2. Bei Aufruf des Makro soll nun geprüft werden ob der übergebene Wert =1 ist , denn dann wird einfach ein Master aus dem stencil auf der Seite "gedropped".
Ist der Wert >1 wird der aus dem Context Menu entsprechende Wert genommen und die entsprechende Anzahl gedropped, also irgendwas zwischen 2 und 10 Shapes.

Und: Ja es braucht nur der Fokus auf Visio 2010 liegen, ältere Versionen werden ohnehin nicht unterstützt :)
Ich habe auch kein Problem damit das ganze per Visual Studio zu machen, ich bin schliesslich echter Visio masochist :), nur weiss ich nicht, ob man einen Wert aus dem Contextmenu überhaupt an ein Macro übergeben kann und wenn ja, wie?

Ich hoffe das war nun ein wenig verständlicher und das Du mit Deinem Latein noch nicht am Ende bist :)

Gruss aus dem nasskalten Norden
Frank


   
Best Regards
Frank

Jumpy

Mit meinem Latein nicht, aber mit meiner Visio-Version, da ich noch auf 2007 festhänge.
Da gibt es im Action-Menü afaik noch nicht die Option mit den Untermenüs.

Daher muss ich jetzt mal raten, gibt es für jedes der Untermenü-Punkte auch eine eigene Reihe im ShapeSheet?
Falls ja, so haben die dann doch eine Spalte Menü, wo dann die Zahl steht 1..10, oder?
Dann haben die auch jeweils eine Action-Spalte, wo drin steht was passieren soll, oder?
Wenn das so ist (wie gesagt hab kein V2010), dann in die Action-Spalte jeweils:

=CALLTHIS("MyMacro",1)
=CALLTHIS("MyMacro",2)
=CALLTHIS("MyMacro",3)

Und das Macro sieht dann entsprechend aus:


Sub MyMacro(shp as Visio.Shape, count as Integer)
'und dann die Logik, die entsprechen der Größe in Count Shapes auf die Seite dropped.
For i=1 To count
  'Drop and place shapes
Next i
End Sub


Wenn die ganzen Annahmen nicht passen, musst du es vllt. doch mal wieder auf Englisch versuchen und auf jemanden mit Visio2010 hoffen.

frank

Hi Jumpy

Sorry für den Delay, der Weihnachtsterror hat mich voll erwischt!  :(
Deine letzte Antwort scheint genau das zu sein wonach ich gesucht habe, nur kann ich gerade nicht begreifen das es so einfach gehen soll. Das beweist wieder nur einmal das es ab und an mal sinn macht das zeugs 1-2 Tage von sich weg zu schieben und schon sieht man die blöden Bäume (im Wald) auch wieder...

Ich teste das morgen mal in Ruhe und widme mich nun dem Konsumterror in Hamburg!

Danke!!!
Best Regards
Frank

frank

Jumpy! You made it happen! Thank so much!

Just Notice:
=CALLTHIS("MyMacro",1) won´t do it

I had to use
=CALLTHIS("MyMacro","",1) to get it to work

Thanks! Again, and again,....

cheers,
Frank
Best Regards
Frank