Oversigt

Når du automatiserer et Office-produkt fra Visual Basic, kan det være nyttigt at flytte en del af koden til et Microsoft Visual Basic for Applications (VBA)-modul, der kan køre inde i procesrummet på serveren. Dette kan øge den overordnede eksekveringshastighed for dit program og afhjælpe problemer, hvis serveren kun udfører en handling, når et opkald foretages i processen.

Denne artikel viser, hvordan du dynamisk føjer et VBA-modul til et kørende Office-program fra Visual Basic og derefter kalder makroen for at udfylde et regneark i processen.

Flere oplysninger

Følgende eksempel demonstrerer indsættelse af et kodemodul i Microsoft Excel, men du kan bruge den samme metode til Word og PowerPoint, fordi begge indeholder det samme VBA-program.

Eksemplet bruger en statisk tekstfil til kodemodulet, der er indsat i Excel. Det kan være en god ide at overveje at flytte koden til en ressourcefil, som du kan samle i dit program, og derefter udtrække den ind i en midlertidig fil, når det er nødvendigt på kørselstid. Det ville gøre projektet mere overskueligt i forbindelse med omfordeling.

Fra og Microsoft Office XP skal en bruger give adgang til VBA-objektmodellen, før automatiseringskode, der er skrevet til at manipulere VBA, fungerer. Dette er en ny sikkerhedsfunktion i Office XP. Du kan finde flere oplysninger i følgende Knowledge Base-artikel:

282830 Programadgang til Office XP VBA Project nægtet

Trin til at opbygge eksemplet

  1. Først skal du oprette en ny tekstfil med navnet KbTest.bas (uden .txt filtypenavn). Dette er det kodemodul, som vi indsætter Excel under kørsel.

  2. Tilføj følgende kodelinjer i tekstfilen:

       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. Gem tekstfilen i mappen C:\KbTest.bas, og luk derefter filen.

  4. Start Visual Basic og opret et standardprojekt. Formular1 oprettes som standard.

  5. I menuen Project skal du klikke på Referencer og derefter vælge den relevante typebiblioteksversion, som giver dig mulighed for at bruge tidlig binding til Excel.

    Vælg f.eks. en af følgende:

    • Vælg Microsoft Office Excel 12.0 i biblioteket for 2007.

    • For Microsoft Office Excel 2003 skal du vælge biblioteket 11.0.

    • Vælg Microsoft Excel 10.0 for 2002.

    • Vælg Microsoft Excel 9.0 for 2000.

    • Vælg Microsoft Excel 8.0 for 97.

  6. Føj en knap til Formular1, og placer følgende kode i handleren for knappens Klik-hændelse:

       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. I Excel 2002 og i nyere versioner Excel skal du aktivere adgang til VBA-projektet. For at gøre dette skal du bruge en af følgende metoder:

    • I Excel 2007 skal du klikke på Microsoft Office og derefter klikke på Excel Indstillinger. Klik på Center for sikkerhed og sikkerhed og Indstillinger. Klik på Indstillinger, klik for at markere afkrydsningsfeltet Hav tillid til adgang til VBA-projektobjektmodellen, og klik derefter to gange på OK.

    • I Excel 2003 og i tidligere versioner af Excel skal du pege på Makro i menuen Funktioner og derefter klikke på Sikkerhed. I dialogboksen Sikkerhed skal du klikke på fanen Kilder, der er tillid til og derefter klikke for at markere afkrydsningsfeltet Hav tillid Visual Basic Project datakilder.

  8. Kør Visual Basic projekt.

Referencer

Du kan finde flere oplysninger om Office af Visual Basic, på Office Development Support på følgende adresse:

http://support.microsoft.com/ofd

Har du brug for mere hjælp?

Udvid dine færdigheder
Gå på opdagelse i kurser
Få nye funktioner først
Deltag i Microsoft insiders

Var disse oplysninger nyttige?

Hvor tilfreds er du med kvaliteten af sproget?
Hvad påvirkede din oplevelse?

Tak for din feedback!

×