Zugriff auf andere Page in Visio

Hallo Experten,

ich habe ein Makro in VBA Excel programmiert, mit diesem Makro greife ich auf ein Visio Schema zu, mit dem folgenden Makro klappt es auch wunderbar, aber ich will nicht nur auf die Shapes im aktuellen Fenster sondern auch auf die Shapes in den anderen Seiten zugreifen.

Application.ActiveWindow.Page.Shape.ItemFromID(12).Text= „hallo“

vielleicht kann das Makro so aussehen:
Application.ActiveWindow.Page(Seite2).Shape.ItemFromID(12).Text = „hallo“

-> leider kommt dann eine fehlermeldung

Vielen Dank !!!

Mfg
WillsWissen

Tut mir leid, kann ich leider nicht bei helfen.

leider kann ich nicht helfen, da visio eine eigene software ist, die ich nicht gekauft und installiert habe, sodaß ich das problem nicht nachvollziehen und ggf. lösen kann. sorry!

Keine Ahnung von Visio. Sorry.
Aber:
Versuch doch mal eine Aufzeichnung eines VBA-Codes in Visio mit Wechsel der Seite. Dann siehst Du, wie man dort die Seiten anspricht

Hallo,

Mit vba-Progammierung kenne ich mich nicht aus, habe aber einen Hinweis: Nur die Shapes in einer genutzten Shape Library gelten (unmodifiziert) für alle Seiten! Das heisst, um Shapes zu erzeugen, die auf allen Seiten gleich sind, muss man ein Shape aus einer Shape Library benutzen. Wenn das dann verändert wird, wirkt sich die Veränderung auch auf alle Shapes aus, egal auf welcher Seite.

Hallo,

hier muß ich passen.

Gruß
Ramaka

Hallo,

da kann ich leider nicht weiterhelfen.

m.f.g. namina

Hallo WillsWissen

versuche es doch einmal mit einer Schleife über alle pages

dim pagobj as visio.page
For Each PagObj In ActiveDocument.Pages
Application.ActiveWindow.pagobj.Shape.ItemFromID(12).Text= „hallo“ 'oder so ähnlich :wink:)
Next PagObj

ich hab zwar kein Visio zum Testen, könnte aber so funktionieren.

liebe Grüße

Stephan (Jason)

Vielen Dank!, leider funktioniert es so nicht.

das Makro funktioniert mit ActivWindow

Application.ActiveWindow.Page.Shapes.ItemfromID(12).Tex = „hallo“

Könnte es funktionieren wenn ich mit der benennung der ersten Seite fertig bin, die andere seite active setzte?

vielleicht so :


Set Window(„blabla“).Pages(„seite2“) = ActivWindow

und danach Application… usw.

ich habe es momentan mit zichversionen versucht, wenn es mit activewindow klappt, muss es ja eine möglichkeit geben ihm zu sagen, dass er das Shape von der Seite 2 ändern soll.

MFG

WILLSWISSEN

Hallo WillsWissen,
es gibt dafür mind. zwei Lösungen:

1: Schnell, in einer Schleife verwendbar aber fehleranfällig (Indizies ändern sich, z.B. beim umsortieren der Seiten):
visoObject.ActiveDocument.Pages(3).Shapes(1).Text = „neuer text“

2: nicht sehr flexibel aber ziemlich sicher, was die Adressierung der Objekte angeht:
visoObject.ActiveDocument.Pages(„Page-2“).Shapes(„Sheet.1“).Text = „neuer text“

MfG
WW

hallo Waldemer Wesner(superexperte),

Vielen Dank!!! Es klappt!!!

MFG
Willswissen

Hallo WillsWissen,
scheint deine 3.Anfrage an mich zu sein. Ich weiß immer noch nicht deinen Namen :.)
Versuchs mal mit

Das Shape z.B.benennen mit „Bild1“.

ActiveSheet.Shapes(„Bild1“).TextFrame.Characters.Text = „hallo“

Wenn das nicht geht, das „ActiveSheet“ gegen z.B. Sheets"Tabelle1" austauschen.

Bis dann.
Softoldi

hi, bin erst jetzt am mail beantworten…
hast schon hilfe gekriegt?

danke für die Antwort RoPf,

die Lösung vom Waldemar funktioniert!!!

mfg

wilsswissen

Hallo willswissen

Versuchs dann doch mal auf folgende Weise:
dim i as integer
For Each PagObj In ActiveDocument.Pages
i = i + 1
Set Window(„blabla“).Pages(i) = ActivWindow
Application.ActiveWindow.pagobj.Shape.ItemFromID(12).Text= „hallo“ 'oder so ähnlich :wink:)
Next PagObj

Sollte der Counter mit 0 anfangen (weiss ich halt nicht so genau) sagst du einfach i = i + 1 - 1

Ich kanns wie gesagt nicht testen.
einfach ausprobieren.

liebe Grüße

Jason

Hallo WillsWissen,

ich kenne mich mit Visio und der unter VBA-eforderlichen Syntax für Viso-Objekte nicht aus.

Mit freundliche Grüßen
Franz