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.
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
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.
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 )
Next PagObj
ich hab zwar kein Visio zum Testen, könnte aber so funktionieren.
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.
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“
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 )
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.