Zusammenfassung
Bei der Automatisierung eines Office-Produkts aus Visual Basic kann es hilfreich sein, einen Teil des Codes in ein Microsoft Visual Basic for Applications-Modul (VBA) zu verschieben, das im Prozessbereich des Servers ausgeführt werden kann. Dadurch kann die Gesamtausführungsgeschwindigkeit für Ihre Anwendung erhöht und Probleme gemildert werden, wenn der Server nur dann eine Aktion ausgeführt hat, wenn ein Aufruf ausgeführt wird.
In diesem Artikel wird veranschaulicht, wie Sie einer ausgeführten Office-Anwendung aus Visual Basic dynamisch ein VBA-Modul hinzufügen und dann das Makro aufrufen, um ein Arbeitsblatt während des Vorgangs zu füllen.Weitere Informationen
Das folgende Beispiel veranschaulicht das Einfügen eines Codemoduls in Microsoft Excel. Sie können jedoch dasselbe Verfahren für Word und PowerPoint verwenden, da beide das gleiche VBA-Modul enthalten.
Im Beispiel wird eine statische Textdatei für das Codemodul verwendet, das in die Datei Excel. Möglicherweise möchten Sie den Code in eine Ressourcendatei verschieben, die Sie in Ihre Anwendung kompilieren können, und dann bei Bedarf in eine temporäre Datei extrahieren. Dadurch wäre das Projekt für die Erneute Verteilung besser verwaltbar. Beginnend mit Microsoft Office XP muss ein Benutzer Zugriff auf das VBA-Objektmodell gewähren, bevor Automatisierungscode, der zum Bearbeiten von VBA geschrieben wurde, funktioniert. Dies ist ein neues Sicherheitsfeature mit Office XP. Weitere Informationen finden Sie im folgenden Knowledge Base-Artikel:282830 Programmgesteuerter Zugriff auf Office XP VBA-Project wird verweigert
Schritte zum Erstellen des Beispiels
-
Erstellen Sie zunächst eine neue Textdatei mit dem Namen KbTest.bas (ohne die Erweiterung .txt Dateierweiterung). Dies ist das Codemodul, das zur Laufzeit in Excel eingefügt wird.
-
Fügen Sie in der Textdatei die folgenden Codezeilen hinzu:
Attribute VB_Name = "KbTest"
' Your Microsoft Visual Basic for Applications macro function takes 1 ' parameter, the sheet object that you are going to fill. Public Sub DoKbTest(oSheetToFill As Object) Dim i As Integer, j As Integer Dim sMsg As String For i = 1 To 100 For j = 1 To 10 sMsg = "Cell(" & Str(i) & "," & Str(j) & ")" oSheetToFill.Cells(i, j).Value = sMsg Next j Next i End Sub -
Speichern Sie die Textdatei im Verzeichnis "C:\KbTest.bas", und schließen Sie dann die Datei.
-
Beginnen Visual Basic und Erstellen eines Standardprojekts. Formular1 wird standardmäßig erstellt.
-
Klicken Sie Project Menü Start auf Verweise, und wählen Sie dann die entsprechende Typbibliotheksversion aus, mit der Sie frühe Bindungen zum Erstellen von Excel.
Wählen Sie beispielsweise eine der folgenden Optionen aus:-
Wählen Microsoft Office Excel 2007 die Bibliothek 12.0 aus.
-
Wählen Microsoft Office Excel 2003 die Bibliothek 11.0 aus.
-
Wählen Microsoft Excel 2002 die Bibliothek 10.0 aus.
-
Wählen Microsoft Excel 2000 die Bibliothek 9.0 aus.
-
Wählen Microsoft Excel 97 die Bibliothek 8.0 aus.
-
-
Fügen Sie eine Schaltfläche zu Form1 hinzu, und platzieren Sie den folgenden Code im Handler für das Click-Ereignis der Schaltfläche:
Private Sub Command1_Click()
Dim oXL As Excel.Application Dim oBook As Excel.Workbook Dim oSheet As Excel.Worksheet Dim i As Integer, j As Integer Dim sMsg As String ' Create a new instance of Excel and make it visible. Set oXL = CreateObject("Excel.Application") oXL.Visible = True ' Add a new workbook and set a reference to Sheet1. Set oBook = oXL.Workbooks.Add Set oSheet = oBook.Sheets(1) ' Demo standard Automation from out-of-process, ' this routine simply fills in values of cells. sMsg = "Fill the sheet from out-of-process" MsgBox sMsg, vbInformation Or vbMsgBoxSetForeground For i = 1 To 100 For j = 1 To 10 sMsg = "Cell(" & Str(i) & "," & Str(j) & ")" oSheet.Cells(i, j).Value = sMsg Next j Next i ' You're done with the first test, now switch sheets ' and run the same routine via an inserted Microsoft Visual Basic ' for Applications macro. MsgBox "Done.", vbMsgBoxSetForeground Set oSheet = oBook.Sheets.Add oSheet.Activate sMsg = "Fill the sheet from in-process" MsgBox sMsg, vbInformation Or vbMsgBoxSetForeground ' The Import method lets you add modules to VBA at ' run time. Change the file path to match the location ' of the text file you created in step 3. oXL.VBE.ActiveVBProject.VBComponents.Import "C:\KbTest.bas" ' Now run the macro, passing oSheet as the first parameter oXL.Run "DoKbTest", oSheet ' You're done with the second test MsgBox "Done.", vbMsgBoxSetForeground ' Turn instance of Excel over to end user and release ' any outstanding object references. oXL.UserControl = True Set oSheet = Nothing Set oBook = Nothing Set oXL = Nothing End Sub -
Für Excel 2002 und für spätere Excel müssen Sie den Zugriff auf das VBA-Projekt aktivieren. Wenden Sie hierzu eine der folgenden Methoden an:
-
Klicken Excel 2007 auf die Schaltfläche Microsoft Office, und klicken Sie dann auf Excel Optionen. Klicken Sie auf Trust Center und dann auf Einstellungen für das Trust Center. Klicken Sie Einstellungen Makro-Objekt, klicken Sie, um das Kontrollkästchen Zugriff auf das VBA-Projektobjektmodell vertrauen zu aktivieren, und klicken Sie dann zweimal auf OK.
-
Zeigen Excel 2003 und in früheren Excel im Menü Extras auf Makro, und klicken Sie dann auf Sicherheit. Klicken Sie im Dialogfeld Sicherheit auf die Registerkarte Vertrauenswürdige Quellen, und aktivieren Sie dann das Kontrollkästchen Zugriff auf Visual Basic Project vertrauenswürdige Datenquellen vertrauen.
-
-
Führen Sie das Visual Basic aus.
Informationsquellen
Weitere Informationen zur Automatisierung von Office von Visual Basic finden Sie auf der Office Development Support-Website unter der folgenden Adresse: