Office 2000 COM Add-InsOffice 2000 COM Add-InsWerkzeuge und OptimierungWerkzeuge und Optimierung
Tilo BöttcherTilo BöttcherTechnical SpecialistTechnical Specialist
Microsoft GmbHMicrosoft [email protected]@microsoft.com
Nach gut zwölf Monaten Office 2000 Nach gut zwölf Monaten Office 2000 wollen wir neben einem Überblick über wollen wir neben einem Überblick über die programmatischen die programmatischen Erweiterungsmöglichkeiten mit COM Add-Erweiterungsmöglichkeiten mit COM Add-Ins in den verschiedenen Office 2000 Ins in den verschiedenen Office 2000 Anwendungen auch Möglichkeiten für Anwendungen auch Möglichkeiten für das Optimieren von VB/VBA das Optimieren von VB/VBA Applikationen aufzeigen.Applikationen aufzeigen.
Office 2000 COM Add-InsOffice 2000 COM Add-InsWerkzeuge und OptimierungWerkzeuge und Optimierung
Was Sie heute erwartetWas Sie heute erwartet
Ein Überblick sowie die Klärung einiger Ein Überblick sowie die Klärung einiger FragenFragen Erweitern aber wie ?
Sicher (gegen Angriffe und unberechtigte Veränderungen) ?
Robust
Schnell (beim Start, beim Beenden, im Zugriff auf Datenbanken, Informationsaustausch etc.) ?
Wiederverwendbar – modular ?
Office 2000 COM Add-InsOffice 2000 COM Add-InsWerkzeuge und OptimierungWerkzeuge und Optimierung
AgendaAgenda
SR1a/OL 2000 Security Patch OverviewSR1a/OL 2000 Security Patch Overview
COM Add-In Entwicklung – Werkzeuge COM Add-In Entwicklung – Werkzeuge und Erfahrungenund Erfahrungen Überblick: COM Add-Ins mit VB/VBA sowie C++ und ATL
entwickeln
CodeoptimierungCodeoptimierung Kapselung
Eventhandling
Tipps
AgendaAgenda
SR1a/OL 2000 Security Patch OverviewSR1a/OL 2000 Security Patch Overview
COM Add-In Entwicklung – Werkzeuge COM Add-In Entwicklung – Werkzeuge und Erfahrungenund Erfahrungen Überblick: COM Add-Ins mit VB sowie C++ und ATL
entwickeln
CodeoptimierungCodeoptimierung Kapselung
Eventhandling
Tipps
Allgemeine FixesAllgemeine Fixes Outlook 2000 Migration von Win 9.x to W2K
Excel 2000 SYLK File Security Update
Excel Programmatic Text Export Update
WORM. Explore.Zip Virus Update
IE 5.0a auf IE 5.1 Update
System Komponenten Updates auf Windows 2000 Stand (incl. MDAC 2.1 auf 2.5, OleAut, Richedit, Windows Installer 1.0 auf 1.1, Web Folders, Jet).
PhotoDraw 2000 Version 2
SR1a/OL 2000 Security Patch OverviewSR1a/OL 2000 Security Patch Overview
Outlook 2000 Security PatchOutlook 2000 Security Patch Block All Access to the following potentially unsafe
attachment types: EXE, COM, URL, LNK, BAT, PIF, INF, REG, CMD, BAS, ISP, INS, CRT, PCD, MST, SCR, HLP, CHM, CPL, VBS, ASF, JS, MDB
Prevent script in One-off forms from executing. (no more prompt)
Always Bring up UI prompt for programmatic access to the Item.Send method in the Outlook Object Model
Always Bring up UI prompt for programmatic access to Address Book Entries, Contact Email Address, and Recipient information in Outlook
SR1a/OL 2000 Security Patch OverviewSR1a/OL 2000 Security Patch Overview
Was wurde für Developer im SR1a gefixt?Was wurde für Developer im SR1a gefixt?
Fixes in allen Bereichen (auch MDAC, IE, Fixes in allen Bereichen (auch MDAC, IE, WEB Server) ...WEB Server) ...einige Auszügeeinige Auszüge Allows multiple multi-threaded (MT) project types.
Forms3 setfocus works with Modal UserForms as expected.
Properly licenses when deploying a DLL with controls on a computer that does not have Office 2000 Developer Edition.
Updates to RichEdit control (RichEd20.dll) for improved text handling and display.
WebCalc retains data and format of cells as expected in scripts, applets, and other programming elements in Internet Explorer 5.
SR1a/OL 2000 Security Patch OverviewSR1a/OL 2000 Security Patch Overview
AgendaAgenda
SR1a/Security Patch OverviewSR1a/Security Patch Overview
COM Add-In Entwicklung – Werkzeuge COM Add-In Entwicklung – Werkzeuge und Erfahrungenund Erfahrungen Überblick: COM Add-Ins mit VB/VBA sowie C++ und ATL
entwickeln
CodeoptimierungCodeoptimierung Kapselung
Eventhandling
Tipps
COM Add-Ins mit VBA entwickelnCOM Add-Ins mit VBA entwickeln
COM Add-In Entwicklung – Werkzeuge und COM Add-In Entwicklung – Werkzeuge und ErfahrungenErfahrungen
Neues COM Add-In Projekt
DesignerMenüleisten, ButtonsWithEvents, Forms
Kompilierung/Registrierung(nur *.dll möglich)
Setup erstellen (Add-In) Verteilung
Offi
ce V
BA
ID
E
*.dll
COM Add-Ins mit VB entwickelnCOM Add-Ins mit VB entwickeln
COM Add-In Entwicklung – Werkzeuge und COM Add-In Entwicklung – Werkzeuge und ErfahrungenErfahrungen
Designer konfigurieren (Impl. IDTExtensibility2)
Menüleisten, Buttons WithEvents, Forms
Kompilierung/Registrierung
Setup erstellen (Add-In)Verpackungs- und Weitergabeass.
Add-In
Verteilung
Vis
ual B
asi
c 6
.0
*.dll*.ocx
*.Exe
COM Add-Ins mit C++ und ATL entwickelnCOM Add-Ins mit C++ und ATL entwickeln
COM Add-In Entwicklung – Werkzeuge und COM Add-In Entwicklung – Werkzeuge und ErfahrungenErfahrungen
ATL COM Wizard
ATL COM Komponente
Verteilung
Vis
ual C
++
6.0
Registry IDTExtensibility2
Objektmodell von Office 2000 und verwendeter App importieren
Interaktion mit UI
Menüeinträge Buttons
Base Event Klassen
Sink Events Map
App Events handlen
TestKompilierung
DemoDemoCOM Add-InsCOM Add-Ins
AgendaAgenda
SR1a/Security Patch OverviewSR1a/Security Patch Overview
COM Add-In Entwicklung – Werkzeuge COM Add-In Entwicklung – Werkzeuge und Erfahrungenund Erfahrungen Überblick: COM Add-Ins mit VB/VBA sowie C++ und ATL
entwickeln
CodeoptimierungCodeoptimierung Kapselung
Eventhandling
Tipps
Verwendung von Klassen – KapselungVerwendung von Klassen – Kapselung Einfach weiterzuverwenden
Einfach zu Projekten hinzuzufügenEinfach zu Projekten hinzuzufügen Weniger Abhängigkeiten zwischen den ModulenWeniger Abhängigkeiten zwischen den Modulen
Macht Task Partitionierung und Spezialisierung möglich
Übersichtlicher: Verbirgt Teile komplexer Prozesse
Vereinfacht Entwicklung und Debugging
Codeverwaltung: Updates an zentraler Stelle nur einmal vonnöten
Mehrfache Instanzeierung möglich
CodeoptimierungCodeoptimierung
Verwendung von Klassen – KapselungVerwendung von Klassen – Kapselung Erzeugen einer Klasse
Einfügen eines KlassenmodulsEinfügen eines Klassenmoduls Sinnvollen Namen verwendenSinnvollen Namen verwenden InitializeInitialize und und TerminateTerminate Events handlen Events handlen Eigenschaften und Methoden festlegenEigenschaften und Methoden festlegen
Objekte instanzeieren
Objektvariablen festlegenObjektvariablen festlegen NewNew Schlüsselwort verwenden Schlüsselwort verwenden Zugriff auf Eigenschaften und MethodenZugriff auf Eigenschaften und Methoden
CodeoptimierungCodeoptimierung
Einfachste Eigenschaft
Public Variable im Klassenmodul
Methoden
Public procedure
Sub oder Function
Rückgabe von Werten möglich
Übergabe von Args möglich
Wird I. A. so verwendet
CodeoptimierungCodeoptimierung
Dim ObjektA as BeispielklasseA
Set ObjektA = New BeispielklasseA
.... TuEtwas mit Funktion xy ...
.... Methoden und Eigenschaften ...
Set ObjektA = Nothing
`Klassenname: BeispielklasseAPublic Sub TuEtwas()Public Function xy() As LongEnd Sub
1
2
Verwendung von CollectionsVerwendung von Collections Manchmal wird eine unbekannte Anzahl an Objekten
benötigt ...
Eine Collection kann andere Objekte aufnehmen
Mit NEW kann eine neue Collection angelegt werden
MethodenMethoden Add – Hinzufügen eines ObjektesAdd – Hinzufügen eines Objektes Item (default) – Referenziert ein ObjektItem (default) – Referenziert ein Objekt Remove – Löscht ein ObjektRemove – Löscht ein Objekt
Count – EigenschaftCount – Eigenschaft Eigenschaften und Einschränkungen:
Collection löschen durch Neudefinition der Elemente Collection löschen durch Neudefinition der Elemente oder Nothing setzenoder Nothing setzen
Public/Global Collections können gefährlich seinPublic/Global Collections können gefährlich sein Keine Kontrolle über den Inhalt möglichKeine Kontrolle über den Inhalt möglich Kapselung in Klassen (Collection Class)Kapselung in Klassen (Collection Class) Collections bestehen aus impliziten ObjektpointernCollections bestehen aus impliziten Objektpointern
CodeoptimierungCodeoptimierung
CodeoptimierungCodeoptimierung
`Ansprechen von Items colItems.Item(1).MethodName colItems.Item(„Bär").MethodName
`Durchwandern der Collection For Each objItem in colItems objItem.MethodName Next
EventhandlingEventhandling WithEvents -- Eventsenken
VBA Schlüsselwort – erlaubt Reaktion auf ObjektEvents (COM)VB/VBA Objektbrowser stellt dies am besten darDeklaration einer Variablen „spiegelt“ das aktuelle Objekt
Private WithEvents obj As SomeObject
Muß in einem Klassenmodul oder Form vorgenommen werden, erkennbar auch im Editor mit Autoausfüllen-Menüs
CodeoptimierungCodeoptimierung
Eventhandling -- WithEventsEventhandling -- WithEvents
CodeoptimierungCodeoptimierung
Private Sub Class_Initialize() Set mobjExcelApp = New Excel.Application mobjExcelApp.Visible = TrueEnd Sub
Dim mobjExcelEvents As clsExcelEvents
Sub InitExcelEvents() Set mobjExcelEvents = New clsExcelEventsEnd Sub
1
2
Klassenmodul
Standardmodul
CodeoptimierungCodeoptimierung
Reguläres ModulReguläres ModulReguläres ModulReguläres Modul
KlassenModulKlassenModulKlassenModulKlassenModul
COM ServerCOM ServerCOM ServerCOM Server
Objektvariable
Objektvariable
Exponiertes Objekt
Ereignis Prozedur
Pointer auf das Pointer auf das KlassenModulKlassenModul
Pointer auf das ObjektPointer auf das Objekt
ObjectEvents triggernObjectEvents triggernProzeduren im Klassen-Prozeduren im Klassen-modulmodul
Private WithEvents objSomething _ As SomeObject
Private WithEvents objSomething _ As SomeObject
Sub objSomething_SomeEvent()
End Sub
Sub objSomething_SomeEvent()
End Sub
Eventhandling -- RaiseEventsEventhandling -- RaiseEvents Raising Events falls “eingebaute” Events nicht ausreichen
(seit VB 5)
Events im Deklarationsbereich festlegenEvents im Deklarationsbereich festlegen RaiseEvent Schlüsselwort im Code nutzenRaiseEvent Schlüsselwort im Code nutzen
Event Senken
Applikationen werden benachrichtigt, wenn Events Applikationen werden benachrichtigt, wenn Events eintreteneintreten
WithEvents in Klassenmodulen nutzenWithEvents in Klassenmodulen nutzen Formular-Modul ist am einfachsten (immer da)Formular-Modul ist am einfachsten (immer da)
CodeoptimierungCodeoptimierung
CodeoptimierungCodeoptimierung
Private Sub dbCtl1_validateRecord(ByVal operation As String, _ cancel As Boolean)
Dim msgString As StringDim iIndx As Integer
If (operation = "Save") Then If (Len(Text1.Text)<1) Then msgString = "Bitte einen Titel eingeben!" & vbCrLf msgString = msgString & "Speichern wurde abgebrochen" iIndex = MsgBox(msfString, vbCritical, _
"VB DataControl") Cancel = true Else Cancel = false End IfEnd IfEnd Sub
Public Event validateRecord(ByVal operation As String, ByRef cancel As Boolean)
RaiseEvent validateRecord("Add", bCancel)
1
2
3
Deklarationsteil im Klassenmodul
etwas später im Code
10 Tipps für die Optimierung von VB/VBA 10 Tipps für die Optimierung von VB/VBA COM Add-InsCOM Add-Ins
1. timeGetTime wesentlich schneller als die Timer Funktion
2. vbNullString anstelle von “” zur Initialisierung nutzen
3. String concatenation: Sehr teuer!!
4. Like Operator für Zeichenvergleich nutzen
5. Objekte außerhalb von Schleifen referenzieren
CodeoptimierungCodeoptimierung
10 Tipps für die Optimierung von VB/VBA 10 Tipps für die Optimierung von VB/VBA COM Add-Ins (Cont.)COM Add-Ins (Cont.)
6. DoEvents kosten Zeit!
7. Case Statements unter VBA “vorsortieren”
8. For Each…Next wesentlich schneller als For … Next in einer Collection
9. Löschen einer Collection am schnellsten durch Pointer auf eine neue Collection setzen
10. Early Binding vs. Late Binding!
CodeoptimierungCodeoptimierung
DemoDemo10 Tips zur VB/VBA Codeoptimierung10 Tips zur VB/VBA Codeoptimierung
Links und LiteraturLinks und Literatur
http://msdn.microsoft.com/officedev
http://officeupdate.microsoft.com
http://www.microsoft.com/germany/msdn/techtalk
http://msdn.microsoft.com/library
http://www.vcdj.com
http://www.sliptstick.com
http://www.microeye.com
http://www.microsoft.com/germany/mspress
http://www.wrox.com (Professional ATL COM Programming by R. Grimes)
Q & A ...Q & A ...
where do you want to go today?
Top Related