We couldn’t sign you in
Select the account you want to use.

Samenvatting

Wanneer u een Office-product uit Visual Basic automatiseerd, kan het handig zijn om een deel van de code te verplaatsen naar een VBA-module (Microsoft Visual Basic for Applications) die binnen de procesruimte van de server kan worden uitgevoerd. Dit kan de algehele uitvoeringssnelheid voor uw toepassing verhogen en problemen helpen oplossen als de server alleen actie onderneemt wanneer een oproep in proces wordt uitgevoerd.

In dit artikel wordt beschreven hoe u een VBA-module dynamisch kunt toevoegen aan een Office-toepassing die wordt uitgevoerd vanuit Visual Basic en vervolgens de macro kunt bellen om een werkblad in te vullen.

Meer informatie

In het volgende voorbeeld wordt gedemonstreerd dat u een codemodule in Microsoft Excel, maar u kunt dezelfde techniek gebruiken voor Word en PowerPoint omdat beide dezelfde VBA-engine bevatten.

In het voorbeeld wordt een statisch tekstbestand gebruikt voor de codemodule die in de Excel. U kunt overwegen om de code te verplaatsen naar een resourcebestand dat u in uw toepassing kunt compileren en vervolgens in een tijdelijk bestand op te halen wanneer dat nodig is tijdens de uitvoering. Dit maakt het project beter beheersbaar voor herverdeling.

Vanaf Microsoft Office XP moet een gebruiker toegang verlenen tot het VBA-objectmodel voordat automatiseringscode die is geschreven om VBA te manipuleren, werkt. Dit is een nieuwe beveiligingsfunctie met Office XP. Zie het volgende Knowledge Base-artikel voor meer informatie:

282830 Programmatic Access to Office XP VBA Project is Denied

Stappen voor het maken van het voorbeeld

  1. Maak eerst een nieuw tekstbestand met de naam KbTest.bas (zonder de .txt extensie). Dit is de codemodule die we in de Excel bij run-time.

  2. Voeg in het tekstbestand de volgende regels code toe:

       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. Sla het tekstbestand op in de adreslijst C:\KbTest.bas en sluit het bestand.

  4. Start Visual Basic en maak een standaardproject. Formulier1 wordt standaard gemaakt.

  5. Klik in Project menu opReferences en selecteer vervolgens de juiste versie van de typebibliotheek waarmee u vroege binding kunt gebruiken voor Excel.

    Selecteer bijvoorbeeld een van de volgende opties:

    • Selecteer Microsoft Office Excel 2007 de bibliotheek 12.0.

    • Selecteer Microsoft Office Excel 2003 de 11.0-bibliotheek.

    • Selecteer Microsoft Excel 2002 de 10.0-bibliotheek.

    • Selecteer Microsoft Excel 2000 de 9.0-bibliotheek.

    • Selecteer Microsoft Excel 97 de 8.0-bibliotheek.

  6. Voeg een knop toe aan Formulier1 en plaats de volgende code in de handler voor de gebeurtenis Klik op de knop:

       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. Voor Excel 2002 en voor latere versies van Excel moet u toegang tot het VBA-project inschakelen. Gebruik een van de volgende methoden om dit te doen:

    • Klik Excel 2007 op de Microsoft Office knop en klik vervolgens op Excel opties. Klik op Vertrouwenscentrum en klik vervolgens op Vertrouwenscentrum Instellingen. Klik op Macro Instellingen, klik om het selectievakje Toegang vertrouwen tot het VBA-projectobjectmodel in te selecteren en klik twee keer op OK.

    • Wijs Excel 2003 en in eerdere versies van Excel macro aan in hetmenu Extra en klik vervolgens op Beveiliging. Klik in het dialoogvenster Beveiliging op het tabblad Vertrouwde bronnen en klik vervolgens om het selectievakje Toegang tot vertrouwen Visual Basic Project in.

  8. Voer het Visual Basic uit.

Verwijzingen

Voor meer informatie over automatisering van Office van Visual Basic, raadpleegt u de Office development support-site op het volgende adres:

http://support.microsoft.com/ofd

Meer hulp nodig?

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Microsoft insiders

Was deze informatie nuttig?

Hoe tevreden bent u met de taalkwaliteit?
Wat heeft uw ervaring beïnvloed?

Bedankt voor uw feedback.

×