Programmieren in Anwendungen
Annette Bieniusa
Technische Universit¨at Kaiserslautern bieniusa@cs.uni-kl.de
24.05.2013
Uberblick ¨
Ereignisorientierte Programmierung
UserForm-Dialoge
Integrierte Office-Automatisierung
Sicherheitsaspekte
Ereignisorientierte Programmierung
Ereignisorientierte Programmierung
I
Ereignisse treten z.B. beim Arbeiten mit Steuerelementen auf.
I
Ereignisse k¨ onnen durch den Benutzer direkt (beispielsweise durch Anklicken von Buttons, Wechsel zwischen
Dokumenten), aber auch durch das System selbst angestossen werden (z.B. ¨ Offnen oder Speichern von Dokumenten).
I
Ereignisprozeduren sind Makros, die als Reaktion auf bestimmte Ereignisse ausgef¨ uhrt werden.
’ H e b t bei M a r k i e r e n e i n e r Z e l l e die g e s a m t e Z e i l e und S p a l t e h e r v o r .
Sub W o r k s h e e t _ S e l e c t i o n C h a n g e ( B y V a l T a r g e t As R a n g e ) C e l l s . I n t e r i o r . C o l o r I n d e x = x l C o l o r I n d e x N o n e A c t i v e C e l l . E n t i r e R o w . I n t e r i o r . C o l o r I n d e x = 15
Beispiel: Durchlauf von Arbeitsbl¨ attern
Sub W o r k b o o k _ O p e n ()
A p p l i c a t i o n . O n K e y Key :=" { P g U p } ", P r o c e d u r e :=" S h e e t s U p "
A p p l i c a t i o n . O n K e y Key :=" { P g D n } ", P r o c e d u r e :="
S h e e t s D o w n "
End Sub
Sub S h e e t s U p () Dim i As I n t e g e r
i = A c t i v e S h e e t . I n d e x + 1
If i <= S h e e t s .C o u n t T h e n S h e e t s ( i ) .S e l e c t End Sub
Sub S h e e t s D o w n () Dim i As I n t e g e r
i = A c t i v e S h e e t . I n d e x - 1 If i >= 1 T h e n S h e e t s ( i ) .S e l e c t End Sub
Beispiel: Automatisierte Speicherabfrage
Sub W o r k b o o k _ O p e n ()
A p p l i c a t i o n . O n T i m e E a r l i e s t T i m e :=Now + T i m e V a l u e("
0 0 : 1 0 : 0 0 ") , P r o c e d u r e :=" S a v e W o r k b o o k "
End Sub
Sub S a v e W o r k b o o k ()
If M s g B o x(" S a v e w o r k b o o k ? ", v b Y e s N o ) = v b Y e s T h e n A c t i v e W o r k b o o k .S a v e
A p p l i c a t i o n . O n T i m e E a r l i e s t T i m e :=Now + T i m e V a l u e("
0 0 : 1 0 : 0 0 ") , P r o c e d u r e :=" S a v e W o r k b o o k "
End Sub
UserForm-Dialoge
Dialoge und Formulare
Integrierte Dialoge f¨ ur h¨ aufig verwendete Abfragen, z.B. Druck- oder Speicherdialog
Vordefinierte VBA-Dialoge f¨ ur einfache Benutzerein- und ausgaben, z.B.
InputBoxund
MsgBoxBenutzerdefinierte Dialoge (UserForm-Dialoge) f¨ ur komplexere Interaktion
Dokumente als Formulare durch direktes Einbetten von
Steuerelementen
Grundlagen zu UserForm-Dialogen
I
Vielzahl von Steuerelementen, z.B. Listenfelder, Schaltfl¨ achen, Eingabefelder
I
UserForm-Diloge werden durch Drag&Drop in der VBA-Entwicklungsansicht zusammengestellt.
I
Flexible Reaktion auf Benutzereingaben durch Ereignisprozeduren, z.B. Hinzuf¨ ugen von Werten
’ A n z e i g e n e i n e s F o r m u l a r s U s e r F o r m N a m e .S h o w
’ B e i m A k t i v i e r e n e i n e s F o r m u l a r s Sub U s e r F o r m N a m e _ A c t i v a t e () ...
End Sub
’ E r e i g n i s p r o z e d u r e n e r s t e l l e n Sub U s e r F o r m N a m e _ E r e i g n i s n a m e Sub S t e u e r e l e m e n t N a m e _ E r e i g n i s n a m e
’ R e s s o u r c e n f r e i g a b e U n l o a d U s e r F o r m N a m e
Integrierte Office-Automatisierung
Kommunikation zwischen Office-Anwendungen
I
Austausch von Daten kann auf verschiedenen Wegen erfolgen
I
Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren
Copyund
Paste)
I
COM-Automation (Component Object Model) (Interprozesskommunikation unter Windows)
I
DAO/ADO (Data Access Objects/ActiveX Data Objects) (VBA-angepasste Objektmodelle zum Datenaustausch unter COM)
I
Integration von Funktionalit¨ a durch COM m¨ oglich
Allgemeine Schritte
1. Erstellen eines Verweises auf die Objektbibliothek der Office-Anwendung, die integriert werden soll
(VBA-Entwicklungsumgebung, Extras→Verweise...) 2. Erzeugung des zu integrierenden Objekts
3. Programmierung der erw¨ unschten Funktionalit¨ at
4. Freigabe des integrierten Objekts
Erzeugung des zu integrierenden Objekts
1. Deklaration der Objektvariablen
Dim a p p X As O b j e k t t y p ’ f r u e h e s B i n d e n Dim a p p W o r d As W o r d . A p p l i c a t i o n Dim a p p E x c e l as E x c e l . A p p l i c a t i o n Dim s h e e t E x c e l as E x c e l . S h e e t Dim a p p X As O b j e c t ’ s p a e t e s B i n d e n
2. Objektinstanzen erzeugen
I
Die
CreateObject-Funktion startet die zugrunde liegende Anweisung und liefert einen Objektverweis auf eine neue Objektinstanz zur¨ uck.
I
Mit dem Sch¨ usselwort
Newwird die zugrunde liegende
Anweisung gestartet und wird eine neue Objektinstanz erzeugt (nur bei fr¨ uhem Binden).
I
Die
GetObject-Funktion liefert einen Objektverweis auf eine
bereits gestartete Anwendung (h¨ aufig schneller).
Beispiele: Objekterzeugung mit Fehlerbehandlung
I
Verwendung von
CreateObjekt On E r r o r R e s u m e N e x tSet A p p W o r d = C r e a t e O b j e c t(" W o r d . A p p l i c a t i o n ") If Err = 429 T h e n
M s g B o x " A n w e n d u n g W o r d n i c h t i n s t a l l i e r t "
End If
I
Verwendung von
GetObject On E r r o r R e s u m e N e x tSet A p p W o r d = G e t O b j e c t( ," W o r d . A p p l i c a t i o n ") If Err = 429 T h e n
M s g B o x " A n w e n d u n g W o r d n o c h n i c h t g e s t a r t e t "
End If
I
Optionale Pfadangaben bei
GetObjectObjekte freigeben
I
Objekte schliessen bzw. beenden, danach stehen sie nicht mehr zur Verf¨ ugung
O b j e k t V a r i a b l e .C l o s e O b j e k t V a r i a b l e .Q u i t
I
Arbeitsspeicher freigeben
Set O b j e k t V a r i a b l e = N o t h i n g
I
Nicht freigegebener Arbeitsspeicher kann zu
Programmabst¨ urzen durch Speichermangel f¨ uhren.
Beispiel: Daten aus Excel auslesen und in Word einf¨ ugen
Sub D a t e n A u s E x c e l () On E r r o r G o T o F e h l e r S u b Dim app As E x c e l . A p p l i c a t i o n
Set app = G e t O b j e c t( ," E x c e l . A p p l i c a t i o n ") app . W o r k b o o k s .O p e n (" M a p p e . x l s x ")
If app . V i s i b l e = F a l s e T h e n app . V i s i b l e = T r u e
End If
A c t i v e D o c u m e n t . B o o k m a r k s (" W E R T ") .S e l e c t
S e l e c t i o n . I n s e r t A f t e r app . A c t i v e S h e e t . R a n g e (" A1 ") app .Q u i t
Set app = N o t h i n g E x i t Sub
F e h l e r S u b :
If Err = 429 T h e n
Set app = C r e a t e O b j e c t(" E x c e l . A p p l i c a t i o n ") E l s e
Beispiel: Einf¨ ugen einer Briefanrede
Dim a p p X L As E x c e l . A p p l i c a t i o n P r i v a t e Sub U s e r F o r m _ A c t i v a t e ()
Dim Z a e h l e r As I n t e g e r
Set a p p X L = C r e a t e O b j e c t(" E x c e l . A p p l i c a t i o n ") a p p X L . W o r k b o o k s .O p e n " N a m e n . x l s x "
a p p X L . S h e e t s (" M i t a r b e i t e r ") .A c t i v a t e
For Z a e h l e r =1 To a p p X L . R a n g e (" A2 ") . C u r r e n t R e g i o n . R o w s . C o u n t
Me . l s t N a m e .A d d I t e m a p p X L . C e l l s ( Zaehler , 2) N e x t
Me . l b l A n z a h l . C a p t i o n = Me . l s t N a m e n . L i s t C o u n t & " N a m e n g e l a d e n "
End Sub
P r i v a t e Sub c m d A b b r e c h e n _ C l i c k () a p p X L .Q u i t
Set a p p X L = N o t h i n g U n l o a d f r m B r i e f a n r e d e End Sub
Beispiel: Einf¨ ugen einer Briefanrede - Teil 2
P r i v a t e Sub l s t N a m e n _ C h a n g e () Dim Z e i l e As I n t e g e r
Dim A n r e d e As S t r i n g
Z e i l e = Me . l s t N a m e n . L i s t I n d e x + 1 If a p p X L . C e l l s ( Zeile , 3) = 1 T h e n E l s e
A n r e d e = " L i e b e F r a u " & a p p X L . C e l l s ( Zeile , 1) End If
Me . t x t B r i e f a n r e d e = A n r e d e End Sub
P r i v a t e Sub c m d E i n f u e g e n _ C l i c k ()
S e l e c t i o n . T y p e T e x t Me . t x t B r i e f a n r e d e c m d A b b r e c h e n _ C l i c k
Sicherheitsaspekte
Sicherheitseinstellungen f¨ ur Makros
I
Ab Office 356: Authentifizierung von vertrauensw¨ urdigen Quellen/Programmierern
I
Standardm¨ assig werden dann nur Makros ausgef¨ uhrt, die aus vertrauensw¨ urdigen Quellen stammen ( ¨ Uberpr¨ ufung durch digitale Signaturen).
I