Rezumat
La automatizarea unui produs Office din Visual Basic, poate fi util să mutați o parte a codului într-un modul Microsoft Visual Basic for Applications (VBA) care poate rula în spațiul de proces al serverului. Acest lucru poate crește viteza generală de executare pentru aplicația dvs. și vă poate ajuta să rezolvați problemele dacă serverul efectuează o acțiune doar atunci când un apel este efectuat în curs.
Acest articol vă arată cum să adăugați dinamic un modul VBA la o aplicație Office în execuție din Visual Basic, apoi să apelați macrocomanda pentru a completa o foaie de lucru în proces.
Mai multe informații
Următorul exemplu demonstrează inserarea unui modul de cod în Microsoft Excel, dar puteți utiliza aceeași tehnică pentru Word și PowerPoint deoarece ambele includ același motor VBA.
Eșantionul utilizează un fișier text static pentru modulul de cod care este inserat în Excel. Se recomandăm să luați în considerare mutarea codului într-un fișier de resurse pe care îl puteți compila în aplicația dvs., apoi să-l extrageți într-un fișier temporar atunci când este necesar la momentul utilizării. Acest lucru ar face proiectul mai gestionabil pentru re-distribuire.
Începând cu Microsoft Office XP, un utilizator trebuie să acorde acces la modelul de obiecte VBA înainte ca orice cod de automatizare scris pentru manipularea VBA să lucreze. Aceasta este o nouă caracteristică de securitate cu Office XP. Pentru mai multe informații, consultați următorul articol din Baza de cunoștințe:
282830 Acces programatic la Office VBA pentru XP Project este refuzat
Steps to build the sample
-
Mai întâi, creați un fișier text nou numit KbTest.bas (.txt bază). Acesta este modulul de cod pe care îl vom insera în Excel la momentul 9.
-
În fișierul text, adăugați următoarele linii de cod:
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 -
Salvați fișierul text în directorul C:\KbTest.bas, apoi închideți fișierul.
-
Porniți Visual Basic și creați un proiect standard. Formularul1 este creat în mod implicit.
-
Pe meniul Project, faceți clic pe Deduceri, apoi selectați versiunea corespunzătoare a bibliotecii de tipuri, care vă permite să utilizați legarea timpurie pentru Excel.
De exemplu, selectați una dintre următoarele variante:-
Pentru Microsoft Office Excel 2007, selectați biblioteca 12.0.
-
Pentru Microsoft Office Excel 2003, selectați biblioteca 11.0.
-
Pentru Microsoft Excel 2002, selectați biblioteca 10.0.
-
Pentru Microsoft Excel 2000, selectați biblioteca 9.0.
-
Pentru Microsoft Excel 97, selectați biblioteca 8.0.
-
-
Adăugați un buton la Formular1 și plasați următorul cod în handler pentru evenimentul Click al butonului:
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 -
Pentru Excel 2002 și versiuni mai Excel, trebuie să activați accesul la proiectul VBA. Pentru aceasta, utilizați una dintre următoarele metode:
-
În Excel 2007, faceți clic Microsoft Office pornire, apoi faceți clic Excel Opțiuni. Faceți clic pe Centru de autorizare, apoi pe Centru de Setări. Faceți clic pe Setări, faceți clic pentru a bifa caseta de selectare Se acordă încredere Accesului la modelul de obiecte al proiectului VBA, apoi faceți clic pe OK de două ori.
-
În Excel 2003 și în versiunile anterioare de Excel, indicați spre Macrocomandă în meniul Instrumente, apoi faceți clic pe Securitate. În caseta de dialog Securitate, faceți clic pe fila Surse de încredere, apoi faceți clic pentru a bifa caseta de selectare Se Visual Basic Project de încredere.
-
-
Rulați proiectul Visual Basic proiect.
Referințe
Pentru mai multe informații despre automatizarea Office de Visual Basic, consultați site-ul Office Asistență pentru dezvoltare la următoarea adresă: