Cum se dinamic adaugă și executați o macrocomandă VBA din Visual Basic

Rezumat

Când se automatizează un produs Office de la Visual Basic, poate fi util pentru a muta o parte a codului într-o Microsoft Visual Basic for Applications (VBA) module care se execută în spațiul de proces al serverului. Acest lucru poate spori viteza generală de executare pentru aplicația și ajuta rezolva probleme dacă serverul numai efectuează o acțiune atunci când un apel este pus în timpul procesului.

Acest articol demonstrează cum se adaugă dinamic un modul VBA la o aplicație Office execută din Visual Basic, și apoi apelați macrocomandă pentru a completa o foaie de lucru în timpul procesului.

Mai multe informații

Următorul exemplu demonstrează inserarea unui modul de cod în Microsoft Excel, dar se pot utiliza aceeași tehnică pentru Word și PowerPoint, deoarece ambele încorpora acelaşi motor VBA.

Eșantion utilizează un fișier text statică pentru modul de cod care este introdus în Excel. Se recomandă să luați în considerare mutarea codul într-un fișier de resurse care compilează în aplicația și apoi extract într-un fișier temporar atunci când este necesar în timpul execuției. Acest lucru ar face proiectul mai uşor de gestionat pentru redistribuire.

Începând cu Microsoft Office XP, un utilizator trebuie să acorde acces la modelul de obiect VBA înainte de orice cod de automatizare scrise să manipuleze VBA va funcționa. Aceasta este o caracteristică nouă de securitate cu Office XP. Pentru mai multe informații, consultați următorul articol din baza de cunoștințe:

refuzat accesul programatic la Office XP proiectul VBA

Pași pentru a construi eșantion

  1. Mai întâi, creați un nou fișier text denumit KbTest.bas (fără extensia .txt). Acest lucru este modulul de cod care ne va introduce în Excel în execuție.

  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. În mod implicit, se creează Form1.

  5. În meniul de proiect , faceți clic pereferințe, şi apoi selectaţi versiunea bibliotecii tipul corespunzător care vă permite să utilizați editare timpurie de legături în Excel.

    De exemplu, selectați una dintre următoarele:

    • 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 Form1 și puneţi următorul cod în rutina de tratare pentru evenimente faceţi clic pe butonul:

       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 pentru versiunile de Excel, trebuie să activați accesul proiectul VBA. Pentru aceasta, utilizați una dintre următoarele metode:

    • În Excel 2007, faceți clic pe Butonul Microsoft Officeși apoi faceți clic pe Opțiuni Excel. Centru de autorizare, și apoi faceți clic pe Setări centru de autorizare. Faceți clic pe Setări macrocomenzi, faceți clic pentru a bifa caseta de selectare Încredere acces la modelul de obiect proiectul VBA și 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 și apoi faceți clic pe Securitate. În caseta de dialog de Securitate , faceți clic pe fila Surse de încredere , și apoi faceți clic pentru a bifa caseta de selectare încredere accesul la proiectul Visual Basic .

  8. Executați proiectul Visual Basic.

Referințe

Pentru mai multe informații despre automatizarea Office din Visual Basic, consultați site-ul de suport de dezvoltare Office la următoarea adresă:


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

V-a fost de ajutor această informație?

Vă mulțumim pentru feedback!

Vă mulțumim pentru feedback! Se pare că ar fi util să luați legătura cu unul dintre agenții noștri de asistență Office.

×