programmieren in anwendungen - ag softech · pdf filei zwischenablage (bei bestimmten...
TRANSCRIPT
![Page 1: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/1.jpg)
Programmieren in Anwendungen
Annette Bieniusa
Technische Universitat Kaiserslautern
16.05.2014
1 / 28
![Page 2: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/2.jpg)
Uberblick
Integrierte Office-Automatisierung
Outlook
2 / 28
![Page 3: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/3.jpg)
Integrierte Office-Automatisierung
3 / 28
![Page 4: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/4.jpg)
Kommunikation zwischen Office-Anwendungen
I Austausch von Daten kann auf verschiedenen Wegen erfolgenI Zwischenablage (bei bestimmten VBA-Objekten durch die
Prozeduren Copy und Paste)I COM-Automation (Component Object Model)
(Interprozesskommunikation unter Windows)I DAO/ADO (Data Access Objects/ActiveX Data Objects)
(VBA-angepasste Objektmodelle zum Datenaustausch unterCOM)
I Integration von Funktionalitat durch COM moglich
4 / 28
![Page 5: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/5.jpg)
Allgemeine Schritte
1. Erstellen eines Verweises auf die Objektbibliothek derOffice-Anwendung, die integriert werden soll(VBA-Entwicklungsumgebung, Extras→Verweise...)
2. Erzeugung des zu integrierenden Objekts
3. Programmierung der erwunschten Funktionalitat
4. Freigabe des integrierten Objekts
5 / 28
![Page 6: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/6.jpg)
Erzeugung des zu integrierenden Objekts
1. Deklaration der Objektvariablen
Dim appX As Objekttyp ’fruehes Binden
Dim appWord As Word.Application
Dim appExcel as Excel.Application
Dim sheetExcel as Excel.Sheet
Dim appX As Object ’spaetes Binden
2. Objektinstanzen erzeugenI Die CreateObject-Funktion startet die zugrunde liegende
Anweisung und liefert einen Objektverweis auf eine neueObjektinstanz zuruck.
I Mit dem Schusselwort New wird die zugrunde liegendeAnweisung gestartet und wird eine neue Objektinstanz erzeugt(nur bei fruhem Binden).
I Die GetObject-Funktion liefert einen Objektverweis auf einebereits gestartete Anwendung (haufig schneller).
6 / 28
![Page 7: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/7.jpg)
Beispiele: Objekterzeugung mit Fehlerbehandlung
I Verwendung von CreateObjekt
On Error Resume Next
Set appWord = CreateObject("Word.Application")
If Err = 429 Then
MsgBox "Anwendung Word nicht installiert"
End If
I Verwendung von GetObject
On Error Resume Next
Set appWord = GetObject(,"Word.Application")
If Err = 429 Then
MsgBox "Anwendung Word noch nicht gestartet"
End If
I Optionale Pfadangaben bei GetObject
Set appExcel = GetObject(,"Excel.Application")
Set appExcel = GetObject("","Excel.Application") ’
startet Anwendung wie bei CreateObject
Set worksheetExcel = GetObject("C:\Daten\Statistic.
xlsx")
7 / 28
![Page 8: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/8.jpg)
Objekte freigeben
I Objekte schliessen bzw. beenden, danach stehen sie nichtmehr zur Verfugung
ObjektVariable.Close
ObjektVariable.Quit
I Arbeitsspeicher freigeben
Set ObjektVariable = Nothing
I Nicht freigegebener Arbeitsspeicher kann zuProgrammabsturzen durch Speichermangel fuhren.
8 / 28
![Page 9: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/9.jpg)
Grunde fur Error 429
Aus der Microsoft Dokumentationhttp://support.microsoft.com/kb/828550
I There is a mistake in the application.
I There is a mistake in the system configuration.
I There is a missing component.
I There is a damaged component.
9 / 28
![Page 10: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/10.jpg)
Beispiel: Daten aus Excel auslesen und in Word einfugen
I Gegeben: Excel-Datei ’’Mappe.xlsx’’, in der verschiedene Datengespeichert sind
I In der Word-Datei, die das Makro enthalt, soll an dieTextmarke WERT der Eintrag aus Zelle "A1" eingetragen werden.
10 / 28
![Page 11: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/11.jpg)
Beispiel: Daten aus Excel auslesen und in Word einfugen
Sub DatenAusExcel ()
On Error GoTo FehlerSub
Dim app As Excel.Application
Set app = GetObject(,"Excel.Application")
app.Workbooks.Open ("Mappe.xlsx")
If app.Visible = False Then
app.Visible = True
End If
ActiveDocument.Bookmarks("WERT").Select
Selection.InsertAfter app.ActiveSheet.Range("A1")
app.Quit
Set app = Nothing
Exit Sub
FehlerSub:
If Err = 429 Then
Set app = CreateObject("Excel.Application")
Else
Err.Raise Err.Number
End If
Resume Next
End Sub
11 / 28
![Page 12: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/12.jpg)
Beispiel: Einfugen einer Briefanrede
I Gegeben: Excel-Datei ’’Namen.xlsx’’ mit Datenblatt’’Mitarbeiter’’. In der ersten Spalte steht "Frau"/"Mann", in derzweiten Spalte der Vorname und in der dritten Spalte derNachname
I In der Wort-Datei gibt es eine UserForm namens frmBriefanrede
mit folgenden Komponenten:I Label lblBriefanrede und lblAnzahl
I Schaltflachen cmdAbbrechen und cmdEinfuegen
I Listbox lstNamen
12 / 28
![Page 13: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/13.jpg)
Beispiel: Einfugen einer Briefanrede
Dim appXL As Excel.Application
Private Sub UserForm_Activate ()
Dim Zaehler As Integer
Set appXL = CreateObject("Excel.Application")
appXL.Workbooks.Open "Namen.xlsx"
appXL.Sheets("Mitarbeiter").Activate
’Iteration ueber die Zeilen
For Zaehler = 1 To appXL.Range("A1").CurrentRegion.Rows.
Count
’Einfuegen der Nachnamen in Listbox
Me.lstNamen.AddItem appXL.Cells(Zaehler , 3)
Next
Me.lblAnzahl.Caption = Me.lstNamen.ListCount & " Namen
geladen"
End Sub
Private Sub cmdAbbrechen_Click ()
’Freigabe nicht benoetigter Resourcen
appXL.Quit
Set appXL = Nothing
Unload frmBriefanrede
End Sub
13 / 28
![Page 14: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/14.jpg)
Beispiel: Einfugen einer Briefanrede - Teil 2
Private Sub lstNamen_Change ()
Dim Zeile As Integer
Dim Anrede As String
’ ListBox nummeriert ab 0!
Zeile = Me.lstNamen.ListIndex + 1
’Trim entfernt Leerzeichen am Anfand und Ende eines
Strings
If Trim(appXL.Cells(Zeile , 1).Text) = "Herr" Then
Anrede = "Lieber Herr " & appXL.Cells(Zeile , 3)
Else
Anrede = "Liebe Frau " & appXL.Cells(Zeile , 3)
End If
Me.lblBriefanrede.Caption = Anrede
End Sub
Private Sub cmdEinfuegen_Click ()
Selection.TypeText Me.lblBriefanrede
cmdAbbrechen_Click
End Sub
14 / 28
![Page 15: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/15.jpg)
Verwendung von Me
I Das Schlusselwort Me kann innerhalb von Klassenmodulenverwendet werden, um auf die Klasseninstanz zu verweisen.
I Beispiel: Im ThisWorkbook-Modul, referenziert Me
ThisWorkbook; in einem UserForm-Modul, bezieht es sich aufdiese Form.
I Im vorigen Beispiel ist es einfacher Me zu werden alsfrmBriefanrede, da kurzer und einfacher anzupassen, falls dasKlassenmodul umbenannt wird.
15 / 28
![Page 16: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/16.jpg)
Beispiel: Excel-Diagramme in Word nutzen
I Word unterstutzt Tabellen, allerdings bietet es keineMoglichkeit Diagramme daraus zu generieren.
I Ziel: Lese Werte aus einer Word-Tabelle und erstelle mittelsExcel ein Diagramm, das in die Zwischenablage kopiert wird.
I Das Diagramm kann dann an gewunschter Stelle eingefugtwerden.
I Beispiel aus RRZN-Handbuch “VBA-Programmierung”
16 / 28
![Page 17: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/17.jpg)
Beispiel: Excel-Diagramme in Word nutzenSub DiagrammErstellen ()
’hier ohne Fehlerbehandlung!
Dim appXL As New Excel.Application
If Selection.Information(wdWithInTable) Then
Selection.Tables (1).Select
Selection.Copy ’Kopie in Zwischenablage
With applXL
.Workbooks.Add ’neue leere Mappe
.ActiveSheet.Paste ’Daten einfuegen
.Charts.Add ’leeres Diagramm
With ActiveChart
.ChartType = xl3DPie
.SetSourceData appXL.Sheets("Tabelle1").UsedRange
.Location xlLocationAsNewSheet ’neues Blatt
.ChartArea.Copy ’Kopie in Zwischenablage
End With
.ActiveWorkbook.Close False ’Schliessen ohne
Speichern
.Quit
End With
Set appXL = Nothing
Else
MsgBox "Bitte Cursor in Tabelle setzen!"
End If
End Sub17 / 28
![Page 18: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/18.jpg)
Beispiel: Outlook-Notizen aus Word
I Ziel: Erstelle aus markiertem Text in Word eine neue Notiz,die sogleich am Bildschirm angezeigt wird
18 / 28
![Page 19: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/19.jpg)
Beispiel: Outlook-Notizen aus Word
Sub NotizErstellen ()
On Error GoTo Fehlerbehandlung
Dim appOL As Outlook.Application
Dim NotizOL As Outlook.NoteItem
Set appOL = GetObject(,"Outlook.Application")
Set NotizOL = appOL.CreteItem(olNoteItem)
If Selection.Type = wdNoSelection Or Selection.Type =
wdSelectionIP Then
Selection.WholeStory ’gesamter Text
End If
NotizOL.Body = Selection.Range.Text
NotizOL.Display ’Anzeige auf dem Bildschirm
Fehlerbehandlung:
If Err = 429 Then
Set appOL = CreateObject("Outlook.Application")
End If
Resume Next
End Sub
19 / 28
![Page 20: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/20.jpg)
Das Outlook-Objektmodell
I Outlook bietet Adressbucher, Ordner mit Emails, Notizen,Aufgaben
I VBA-Code fur Outlook kann nicht mit einzelnenOutlook-Elementen weitergegeben werden, sondern muss als*.bas-Datei exportiert und spater importiert werden.
I Zugriff auf Outlook-Elemente immer uber ein NameSpace-Objekt
I Windows unterstutzt als einzige Datenquelle MAPI(Messaging Application Project Interface)
I Dies erlaubt z.B. das direkte Versenden von Emails
20 / 28
![Page 21: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/21.jpg)
Objekte in Outlook
I NameSpace-Objekt
Set NamespaceVerweis =
Application.GetNameSpace("MAPI")
I Eigenschaften: AdressListe, Folders,CurrentProfileName,ExchangeMailboxServerName,...
I Ordner-Objete (z.B. Standard-Ordner)
Set OrdnerVerweis =
NamespaceVerweis.GetDefaultFolder(Typkonstante)
I Neue Elemente erstellen
Set ObjektVerweis =
Application.CreateItem(Typkonstante)
21 / 28
![Page 22: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/22.jpg)
Objekte in Outlook
I NameSpace-Objekt
Set NamespaceVerweis =
Application.GetNameSpace("MAPI")
I Eigenschaften: AdressListe, Folders,CurrentProfileName,ExchangeMailboxServerName,...
I Ordner-Objete (z.B. Standard-Ordner)
Set OrdnerVerweis =
NamespaceVerweis.GetDefaultFolder(Typkonstante)
I Neue Elemente erstellen
Set ObjektVerweis =
Application.CreateItem(Typkonstante)
22 / 28
![Page 23: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/23.jpg)
Objekttypen
Konstante Beschreibung
olMailItem EMailolNoteItem NotizolContactItem KontaktolTaskItem Aufgabe
23 / 28
![Page 24: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/24.jpg)
Zugriff auf vorhandene Elemente
I Uber die Items-Auflistung eines Folder-ObjektsElement Beschreibung
MailItem Email im Posteingangs-OrdnerNoteItem Notiz im Notizen-OrdnerContact Kontakt im Kontakte-OrdnerAppointmentItem Termin im Kalender-Ordner
I Weiter dann uber objektspezifische Eigenschaften (z.B.Recipients oder Body bei MailItem )
24 / 28
![Page 25: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/25.jpg)
Beispiel: Zuletzt erhaltene Nachricht
Sub LetzteNachricht ()
Dim MeinNS As NameSpace , Posteingang As Folder
Dim Email As MailItem , Anzahl As Integer
Set MeinNS = Application.GetNamespace("MAPI")
Set Posteingang = MeinNS.GetDefaultFolder(olFolderInbox)
Anzahl = Posteingang.Items.Count
Set Email = Posteingang.Items(Anzahl)
MsgBox "Die letzte Nachricht wurde empfangen " & Email.
CreationTime
End Sub
25 / 28
![Page 26: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/26.jpg)
Das Email-Objekt
I E-Mail erstellen
Set MailObjekt = Application.CreateItem(olMailItem)
I Empfanger bestimmen
MailObjekt.Recipients.Add "[email protected]"
I Betreff und Text der Nachricht
MailObjekt.Subject = "Wichtige Info"
MailObjekt.Body = "Lieber Herr Maier , ..."
I Anhang, Position bestimmt die Position des Symbolsinnerhalb der EMail (z.B. Len(Text)+20)
MailObjekt.Attachments.Add Dateipfad ,Position
I Email versenden
MailObjekt.Send
26 / 28
![Page 27: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/27.jpg)
Hinweis: Verwendung von ActiveX-Steuerelementen
I Weitere spezialisierte Softwarekomponenten fur dieMakroprogrammierungen
I Sie konnen in den Anwendungen selbst, aber auch UserFormsverwendet werden
I Beispiele: Kalender, PDF-Reader, Media-Player,Smiley-Auswahl Menu, spezialisierte Diagrammtypen
I Auswahl der installierten ActiveX-Steuerelemente unterEntwicklertools → Steuerelemente / Einfugen →ActiveX-Steuerelemente
I Eventuell mussen die Elemente zuerst registriert werden
27 / 28
![Page 28: Programmieren in Anwendungen - AG Softech · PDF fileI Zwischenablage (bei bestimmten VBA-Objekten durch die Prozeduren Copy und Paste) I COM-Automation ... I Word unterst utzt Tabellen,](https://reader031.vdocuments.pub/reader031/viewer/2022030404/5a79b30b7f8b9a28678ce389/html5/thumbnails/28.jpg)
Praktische Aufgabe
I Erweitern Sie das Beispiel mit Diagrammen in Word um einenUserForm-Dialog, der es erlaubt, zwischen verschiednenDiagrammtypen zu wahlen (z.B. Kreisdiagramm undSaulendiagramm).
I Erstellen Sie einen UserForm-Dialog, der einKalender-Steuerelement verwendet, um ein Datumauszuwahlen und im Text einzufugen. Gleichzeitig soll einpassender Task/Termin in Outlook angelegt werden.
I Erstellen Sie einen UserForm-Dialog, der es erlaubt aus denKontaktdaten in Outlook einzelne Adressen auszuwahlen unddiese im Dokument automatisch einzufugen.
28 / 28