Podsumowanie
Automatyzowanie produktu pakietu Office z programu Visual Basic może być przydatne przeniesienie części kodu do modułu programu Microsoft Visual Basic for Applications (VBA), który może działać wewnątrz obszaru procesu serwera. Może to zwiększyć ogólną szybkość wykonywania dla twojej aplikacji i pomóc złagodzić problemy, jeśli serwer przenosi akcję tylko w trakcie wykonywania połączenia w trakcie procesu.
W tym artykule pokazano, jak dynamicznie dodać moduł VBA do uruchomionej aplikacji Office z programu Visual Basic, a następnie wywołać makro w celu wypełnienia arkusza w trakcie procesu.
Więcej informacji
Poniższy przykład przedstawia wstawianie modułu kodu do programu Microsoft Excel, ale tę samą technikę można stosować w programach Word i PowerPoint, ponieważ oba te aparaty zawierają ten sam aparat VBA.
W tym przykładzie użyto statycznego pliku tekstowego dla modułu kodu wstawionego do Excel. Możesz rozważyć przeniesienie kodu do pliku zasobu, który możesz skompilować w aplikacji, a następnie wyodrębnić do pliku tymczasowego, gdy będzie to konieczne podczas uruchamiania. Dzięki temu projekt będzie można zarządzać jeszcze bardziej w celu ponownego rozmieszczenia.
Rozpoczynając od Microsoft Office XP, użytkownik musi udzielić dostępu do modelu obiektowego VBA, zanim będzie działał dowolny kod automatyzacji napisany w celu manipulowania kodem VBA. To nowa funkcja zabezpieczeń z dodatkiem do Office XP. Aby uzyskać więcej informacji, zobacz następujący artykuł z bazy wiedzy:
282830 Programmatic Access to Office XP VBA Project denied
Procedura tworzenia przykładowego
-
Najpierw utwórz nowy plik tekstowy o nazwie KbTest.bas (bez .txt tekstowego). Jest to moduł kodu, który wstawimy do Excel uruchomieniu.
-
W pliku tekstowym dodaj następujące wiersze kodu:
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 -
Zapisz plik tekstowy w katalogu C:\KbTest.bas, a następnie zamknij plik.
-
Rozpocznij Visual Basic i utwórz projekt standardowy. Domyślnie jest tworzony formularz 1.
-
W menu Projectkliknij polecenie Wnioski, a następnie wybierz odpowiednią wersję biblioteki typów, która pozwoli na używanie wczesnego powiązania z Excel.
Na przykład wybierz jedną z następujących opcji:-
W Microsoft Office Excel 2007 wybierz bibliotekę 12.0.
-
W Microsoft Office Excel 2003 wybierz bibliotekę 11.0.
-
W Microsoft Excel 2002 wybierz bibliotekę 10.0.
-
W Microsoft Excel 2000 wybierz bibliotekę 9.0.
-
Aby Microsoft Excel 97, wybierz bibliotekę 8.0.
-
-
Dodaj przycisk do formularza Form1 i umieść następujący kod w programie obsługi zdarzenia Click przycisku:
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 -
Aby Excel 2002 i nowsze wersje programu Excel, musisz włączyć dostęp do projektu VBA. W tym celu zastosuj jedną z następujących metod:
-
W Excel 2007 kliknij przycisk Microsoft Office, a następnie kliknij pozycję Excel opcje. Kliknij pozycję Centrum zaufania, a następnie kliknij pozycję Centrum Ustawienia. Kliknij pozycję Ustawienia, zaznacz pole wyboru Ufaj dostępowi do modelu obiektowego projektu VBA, a następnie kliknij dwa razy przycisk OK.
-
W Excel 2003 i starszych wersjach programu Excel wskaż polecenie Makro w menu Narzędzia, a następnie kliknij polecenie Zabezpieczenia. W oknie dialogowym Zabezpieczenia kliknij kartę Zaufane źródła, a następnie kliknij, aby zaznaczyć pole wyboru Ufaj dostępowi Visual Basic Project sieci.
-
-
Uruchom Visual Basic projektu.
Informacje
Aby uzyskać więcej informacji na temat automatyzacji Office z Visual Basic, zobacz witrynę Office pomocy technicznej dla rozwoju pod następującym adresem: