Conectați-vă cu Microsoft
Conectați-vă sau creați un cont.
Salut,
Selectați un alt cont.
Aveți mai multe conturi
Alegeți contul cu care doriți să vă conectați.

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

  1. 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.

  2. Î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
  3. Salvați fișierul text în directorul C:\KbTest.bas, apoi închideți fișierul.

  4. Porniți Visual Basic și creați un proiect standard. Formularul1 este creat în mod implicit.

  5. 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.

  6. 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
  7. 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.

  8. 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ă:

http://support.microsoft.com/ofd

Aveți nevoie de ajutor suplimentar?

Extindeți-vă competențele
Explorați instruirea
Fiți primul care obține noile caracteristici
Alăturați-vă la Microsoft Insider

Au fost utile aceste informații?

Cât de mulțumit sunteți de calitatea limbajului?
Ce v-a afectat experiența?

Vă mulțumim pentru feedback!

×