Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA-Aufruf bei Klick auf Visio-Objekt

177 views
Skip to first unread message

Joachim Fuchs

unread,
Mar 14, 2002, 6:59:21 AM3/14/02
to
Hallo,

ich möchte folgendes erreichen:

Ein mit Visio erstelltes Projekt soll vom Endanwender nicht verändert werden
können. Wenn er mit der Maus auf ein Objekt klickt (normaler Mausklick, kein
Doppelklick), dann soll ein VBA-Programm ausgeführt werden. Das betreffende
Objekt soll dabei nicht markiert, verschoben oder verändert werden.

Läßt sich so etwas prinzipiell lösen?
Wenn ja, kann mir jemand einen Tip geben, wie das geht?

Prinzipiell habe ich es bereits hinbekommen, eine VBA-Prozedur nach einem
Doppelklick aufzurufen. Leider finde ich nicht die passenden Events für den
einfachen Klick.

Danke,
Joachim

Senaj Lelic [MVP DE Visio]

unread,
Mar 14, 2002, 9:21:00 AM3/14/02
to
Hallo Joachim,

setze die Zellen SperrX und SperrY auf 1 und dann kann niemand die Shapes
bewegen, aber durchaus anwählen.

--

Regards
Senaj Lelic
MVP Visio
Sen...@DataAssist.de.nospam


"Joachim Fuchs" <nospam....@fuechse-online.de> schrieb im Newsbeitrag
news:uA4gF#0yBHA.1512@tkmsftngp05...

Joachim Fuchs

unread,
Mar 15, 2002, 3:30:45 AM3/15/02
to
Hallo Senaj,

> setze die Zellen SperrX und SperrY auf 1 und dann kann niemand die Shapes
> bewegen, aber durchaus anwählen.
>

das war nicht das Ziel. Ein Mouseclick auf ein Shape soll eine VBA-Prozedur
aufrufen und eben nicht das Shape anwählen.

Danke,
Joachim

Senaj Lelic [MVP DE Visio]

unread,
Mar 16, 2002, 2:32:01 AM3/16/02
to
Ah,

alles klar: Im ShapeSHeet existiert die FUnktion RUNADDON. Setze also in das
Shape, da im ShapeSheet in der Zelle EreignisDplKlick folgende FOrmel rein:
RUNADDON("Thisdocument.<ProcName>"). <Procname> ist der Name DEiner Prozedur
im Container Thisdocument.
mit EINEM Klick gehts nicht .!

--

Regards
Senaj Lelic
MVP Visio
Sen...@DataAssist.de.nospam


"Joachim Fuchs" <nospam....@fuechse-online.de> schrieb im Newsbeitrag

news:eZCALu$yBHA.1512@tkmsftngp05...

Joachim Fuchs

unread,
Mar 16, 2002, 9:35:40 AM3/16/02
to
Hallo Senaj,

inline:

"Senaj Lelic [MVP DE Visio]" <Sen...@DataAssist.de.nospam> schrieb im
Newsbeitrag news:#X97YyLzBHA.2380@tkmsftngp04...


> Ah,
>
> alles klar: Im ShapeSHeet existiert die FUnktion RUNADDON. Setze also in
das
> Shape, da im ShapeSheet in der Zelle EreignisDplKlick folgende FOrmel
rein:
> RUNADDON("Thisdocument.<ProcName>"). <Procname> ist der Name DEiner
Prozedur
> im Container Thisdocument.

Soweit war ich auch schon. Die möglichen Events sind hier aber ja drastisch
eingeschränkt.

> mit EINEM Klick gehts nicht .!

Das war's, was ich gerne realisieren wollte. Schade.

Gibt's irgendeine andere Möglichkeit, z. B. das Dokument in einem anderen
Format abspeichern?

Danke,
Joachim

Senaj Lelic [MVP DE Visio]

unread,
Mar 17, 2002, 2:15:55 AM3/17/02
to
WAs meinst Du mit einem anderen Format ?
Du kannst Visio-Dateien in vielen verschiedenen Formaten speichern, aber
alle Funktionalitäten gehen verloren (sieht man einmal vom Export nach HTML
und den Hyperlinks ab).

--

Regards
Senaj Lelic
MVP Visio
Sen...@DataAssist.de.nospam


"Joachim Fuchs" <nospam....@fuechse-online.de> schrieb im Newsbeitrag

news:eDvCxePzBHA.2308@tkmsftngp04...

Joachim Fuchs

unread,
Mar 17, 2002, 6:21:31 AM3/17/02
to
Hallo Senaj,

ja, z. B. Export als Web Page.
Könnte man da sinnvoll eingreifen? Funktionieren nach diesem Export noch
VBA-Skripte?

Meine Idee ist folgende:
Dem Endanwender sollen zwei Modi zur Verfügung stehen:

Designmodus:
Der Anwender soll mit Visio ein Bedienpult, bestehend aus Tasten,
Drehschaltern etc. entwerfen. Die einzelnen Elemente sollen mit
vorgefertigten VBA-Prozeduren verknüpft werden.

Testmodus:
In diesem Modus soll nun das fertige Bedienpult "bedient" werden, d. h., ein
Mausklick auf einen Schalter soll nun nicht mehr diesen auswählen, sondern
die hinterlegte Aktion ausführen. Die Aktionen sollen letztlich eine
Maschinensimulation steuern.

Eine Bedienung der Tasten mit Doppelklick oder Kontextmenü ist sehr
unbefriedigend und wenig intuitiv.

Danke für weitere Ideen,

Joachim

Senaj Lelic [MVP DE Visio]

unread,
Mar 17, 2002, 11:27:25 AM3/17/02
to
Hallo Joachim,

das geht nur über eingebettete ActiveX-Komponenten - etwas was ich definitiv
nicht empfehle. Alternativ könnte man die Formeln in den ShapeSheets von
einer Zelle im ShapeSheet des Zeichenblattes abhängig machen. DAs ist aber
definitiv nicht so mal eben kurz in einer Email erklärt.

die VBA-Funktionalitäten sind definitiv offline, wenn Du einen Export nach
HTML machst.


--

Regards
Senaj Lelic
MVP Visio
Sen...@DataAssist.de.nospam


"Joachim Fuchs" <nospam....@fuechse-online.de> schrieb im Newsbeitrag

news:emhP5WazBHA.1524@tkmsftngp02...

Peter Suter

unread,
Mar 17, 2002, 12:09:48 PM3/17/02
to
Hi Joachim

Nach meiner Erfahrung lässt sich Deine gewünschte 1-Click-Funkionalität über
den in Visio2002 vorhandenen Event "SelectionChanged" erreichen.

Dazu braucht es einige Kenntnisse mit VBA oder / und VB und etwas
Fleissarbeit.

Beim 1-Click kannst Du dann Deine Lampen und Schalter auf dem Schaltpult mit
hinterlegten Macros "anzünden", umfärben oder umstellen oder die Geometrie
in den Shapes, also das Aussehen, ändern.

Beispiele zu den Events und zu den Shape-Darstellungs-Änderungen gibt's in
den einschlägigen Visio-Fachbüchern! - Sehrwahrscheinlich auch im Buch von
Senja, das demnächst erscheinen soll.


Peter Suter
Ing.
Rossgarten 619 B
CH 3255 Rapperswil BE
++41 31 872 15 12
"Senaj Lelic [MVP DE Visio]" <Sen...@DataAssist.de.nospam> wrote in message
news:uMxEQDdzBHA.1980@tkmsftngp03...

Joachim Fuchs

unread,
Mar 17, 2002, 5:38:00 PM3/17/02
to
Hallo Peter und Senaj,

danke für die Anregungen.

> Nach meiner Erfahrung lässt sich Deine gewünschte 1-Click-Funkionalität
über
> den in Visio2002 vorhandenen Event "SelectionChanged" erreichen.
>
> Dazu braucht es einige Kenntnisse mit VBA oder / und VB und etwas
> Fleissarbeit.
>
> Beim 1-Click kannst Du dann Deine Lampen und Schalter auf dem Schaltpult
mit
> hinterlegten Macros "anzünden", umfärben oder umstellen oder die Geometrie
> in den Shapes, also das Aussehen, ändern.
>

Inzwischen ist es mir gelungen, auf das SelectionChange-Ereignis des
Application-Objektes zu reagieren. Ich habe es auch geschafft, alle Shapes
einer Page zu durchlaufen und z. B. die Texte auszugeben. Prinzipiell macht
das einen recht vielversprechenden Eindruck.

Beim SelectionChange-Ereignis hätte ich eigentlich erwartet, daß als
Parameter eine Referenz des neu angewählten bzw. zuletzt angewählten Shapes
übergeben wird. Leider ist dem nicht so. Wie kommt man denn nun an das
ausgewählte Shape? Hat ein Shape irgendeine Eigenschaft, die anzeigt, ob es
selektiert ist? Oder gibt es eine Liste aller selektierten Objekte?

Gibt es in der Hilfe irgendwo eine Übersicht über die Objekthierarchie?

Gruß
Joachim


Peter Suter

unread,
Mar 17, 2002, 6:21:46 PM3/17/02
to
Hi Joachim

Du kannst/musst nach SelectionChanged die SELEKTION auswerten
zB.
Set oSel = ActiveWindow.Selection
dann prüfe oSel.Count (sonst fällst Du auf die Nase, wenn etwas anderes als
das gewollte Shape oder 2 Shapes selektiert sind.)
Der User kann in Deinem Fall mit 1-Click allerlei Falsches auswählen, das
musst Du verhindern.
Das selektierte Shape findest Du als erstes Item in der Selektion
Set oShp = oSel.Item(1)
Du kannst oShp.Name oder die oShp.ID auswerten, - das wird ja von Visio vom
Master abgeleitet.
Du kannst oShp.Master.Name auswerten oder
Du kannst eigene Datenfelder im Shape auswerten und jenach dem darauf etwas
tun oder nicht.
Du kannst dem Shape auch selbst einen neuen Namen vergeben.
Je nachdem das Ganze dynamisch sein soll, musst Du Dir die Auswertung
anpassen und absichern!
(Hab ich das richtige ShapeSheet erwischt?)
Du kannst eine Menge dabei lernen!

--


Peter Suter
Ing.
Rossgarten 619 B
CH 3255 Rapperswil BE
++41 31 872 15 12

"Joachim Fuchs" <nospam....@fuechse-online.de> wrote in message
news:#d2A6QgzBHA.2816@tkmsftngp05...

Senaj Lelic [MVP DE Visio]

unread,
Mar 17, 2002, 11:27:25 AM3/17/02
to
Hallo Joachim,

das geht nur über eingebettete ActiveX-Komponenten - etwas was ich definitiv
nicht empfehle. Alternativ könnte man die Formeln in den ShapeSheets von
einer Zelle im ShapeSheet des Zeichenblattes abhängig machen. DAs ist aber
definitiv nicht so mal eben kurz in einer Email erklärt.

die VBA-Funktionalitäten sind definitiv offline, wenn Du einen Export nach
HTML machst.


--

Regards
Senaj Lelic
MVP Visio
Sen...@DataAssist.de.nospam


"Joachim Fuchs" <nospam....@fuechse-online.de> schrieb im Newsbeitrag

news:emhP5WazBHA.1524@tkmsftngp02...

Joachim Fuchs

unread,
Mar 18, 2002, 5:22:15 AM3/18/02
to
Hallo Peter,

danke für den Hinweis.

so geht's jetzt:
Private Sub applikation_SelectionChanged(ByVal Window As IVWindow)
Dim s As Shape
For Each s In Window.Selection
s.Text = Time 'irgendwas mit dem Shape anstellen
Next s
Window.DeselectAll 'Anschließend die Selektierung wieder aufheben.
End Sub

Das "applikation_SelectionChanged"-Event erreiche ich, in dem ich eine
Variable "applikation" definiert habe und ihr "application" zuweise. Geht
das nicht auch was einfacher?

Gruß
Joachim

Peter Suter

unread,
Mar 18, 2002, 7:35:45 AM3/18/02
to
Hi Joachim

Nein, so viel ich weiss geht's NUR einfacher bei EVENTS, die vom DOKUMENT
selbst ausgelöst werden.
Jedes Visio-VBA-Projekt enthält eine ThisDocument-Klasse, die automatisch
auf die vom Document-Events
reagieren kann. zB. Public Sub Document_RunModeEntered(ByVal vDoc As
Visio.Document)
ABER
um die andern Events abfangen zu können, braucht es eine klare Deklaration
einer Objektvariable mit WithEvents
Dim WithEvents MyApp As Visio.Application
und die Zuordnung zum Objekt
Set MyApp = Visio.Application
erst dann kann die Sub MyApp_SelectionChanged (ByVal voWin as Visio.Window)
erfolgreich werden.
'
Ich nehme an,dass im neuen Buch von Senaj Lelic alles haargenau erklärt
werden wird. Er hat's schon lange versprochen.

--
Peter Suter
Ing.
Rossgarten 619 B
CH 3255 Rapperswil BE
++41 31 872 15 12
"Joachim Fuchs" <nospam....@fuechse-online.de> wrote in message

news:OrvGbamzBHA.2516@tkmsftngp04...

Senaj Lelic [MVP DE Visio]

unread,
Mar 18, 2002, 8:39:49 AM3/18/02
to
Jessas Peter,

mein Buch ist nur der erste Band und da gehts um SHapeSHeet-Programmierung.
Am Automationsbuch sitze ich noch (das wird voraussichtlich im Juli etwas) .
Das sind ja Erwartungen :-)

--

Regards
Senaj Lelic
MVP Visio
Sen...@DataAssist.de.nospam


"Peter Suter" <p.sut...@bluewin.ch> schrieb im Newsbeitrag
news:uEXwWlnzBHA.2660@tkmsftngp04...

Joachim Fuchs

unread,
Mar 18, 2002, 9:21:56 AM3/18/02
to
Hallo Peter,

> Dim WithEvents MyApp As Visio.Application
> und die Zuordnung zum Objekt
> Set MyApp = Visio.Application

so hatte ich es gemacht. Ich dachte, in Excel und Word käme man auch anders
an die Application-Events, aber das war ein Irrtum meinerseits. Nur daß dort
das SelectionChange-Ereignis zur Tabelle gehört und somit direkt verfügbar
ist.

Nochmals danke für die Hilfe, auch an Senaj,
Joachim

Senaj Lelic [MVP DE Visio]

unread,
Mar 18, 2002, 8:39:49 AM3/18/02
to
Jessas Peter,

mein Buch ist nur der erste Band und da gehts um SHapeSHeet-Programmierung.
Am Automationsbuch sitze ich noch (das wird voraussichtlich im Juli etwas) .
Das sind ja Erwartungen :-)

--

Regards
Senaj Lelic
MVP Visio
Sen...@DataAssist.de.nospam

"Peter Suter" <p.sut...@bluewin.ch> schrieb im Newsbeitrag
news:uEXwWlnzBHA.2660@tkmsftngp04...

0 new messages