Logg på med Microsoft
Logg på, eller opprett en konto.
Hei,
Velg en annen konto.
Du har flere kontoer
Velg kontoen du vil logge på med.

Sammendrag

Når du automatiserer et Office-produkt fra Visual Basic, kan det være nyttig å flytte en del av koden til en Microsoft Visual Basic for Applications-modul (VBA) som kan kjøre i prosessområdet på serveren. Dette kan øke den generelle kjøringshastigheten for programmet og bidra til å lindre problemer hvis serveren bare utfører en handling når et anrop utføres i prosessen.

Denne artikkelen viser hvordan du dynamisk legger til en VBA-modul i et kjørende Office-program fra Visual Basic, og kaller deretter makroen for å fylle ut et prosessregneark.

Mer informasjon

Følgende eksempel viser hvordan du setter inn en kodemodul i Microsoft Excel, men du kan bruke samme teknikk for Word og PowerPoint fordi begge integrerer den samme VBA-motoren.

Eksemplet bruker en statisk tekstfil for kodemodulen som settes inn i Excel. Du bør vurdere å flytte koden til en ressursfil som du kan kompilere til programmet, og deretter pakke den ut i en midlertidig fil ved behov ved kjøring. Dette vil gjøre prosjektet mer håndterbart for ny distribusjon.

Fra Microsoft Office XP må en bruker gi tilgang til VBA-objektmodellen før en automatiseringskode som er skrevet for å manipulere VBA, vil fungere. Dette er en ny sikkerhetsfunksjon med Office XP. Hvis du vil ha mer informasjon, kan du se følgende knowledge base-artikkel:

282830 Programmatisk tilgang til Office XP VBA Project nektes

Trinn for å bygge eksemplet

  1. Først oppretter du en ny tekstfil kalt KbTest.bas (uten .txt filtypen). Dette er kodemodulen vi setter inn i Excel under kjøring.

  2. Legg til 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. Lagre tekstfilen i C:\KbTest.bas-katalogen, og lukk deretter filen.

  4. Start Visual Basic og opprett et standardprosjekt. Skjema1 opprettes som standard.

  5. KlikkReferences Project-menyen, og velg deretter riktig typebibliotekversjon som lar deg bruke tidlig innbinding til å Excel.

    Velg for eksempel ett av følgende:

    • For Microsoft Office Excel 2007 velger du 12.0-biblioteket.

    • For Microsoft Office Excel 2003 velger du 11.0-biblioteket.

    • For Microsoft Excel 2002 velger du 10.0-biblioteket.

    • For Microsoft Excel 2000 velger du 9.0-biblioteket.

    • For Microsoft Excel 97 velger du 8.0-biblioteket.

  6. Legg til en knapp i Skjema1, og plasser følgende kode i behandlingsprogrammet for klikkhendelsen for knappen:

       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. For Excel 2002 og senere versjoner av Excel må du aktivere tilgang til VBA-prosjektet. Hvis du vil gjøre dette, kan du bruke en av følgende metoder:

    • I Excel 2007 klikker du Microsoft Office, og deretter klikker du Excel Alternativer. Klikk Klareringssenter, og klikk deretter Klareringssenter Innstillinger. Klikk Makro Innstillinger, klikk for å merke av for Klarer tilgang til VBA-prosjektobjektmodellen, og klikk deretter OK to ganger.

    • I Excel 2003 og i tidligere versjoner av Excel peker du på Makro på Verktøy-menyen, og deretter klikker du Sikkerhet. Klikk fanen Klarerte kilder i dialogboksen Sikkerhet, og klikk deretter for å merke av for Klarer tilgang til Visual Basic Project.

  8. Kjør Visual Basic prosjektet.

Referanser

Hvis du vil ha mer informasjon om automatisering av Office fra Visual Basic, kan du se Office nettstedet for utviklingsstøtte på følgende adresse:

http://support.microsoft.com/ofd

Trenger du mer hjelp?

Vil du ha flere alternativer?

Utforsk abonnementsfordeler, bla gjennom opplæringskurs, finn ut hvordan du sikrer enheten og mer.

Fellesskap hjelper deg med å stille og svare på spørsmål, gi tilbakemelding og høre fra eksperter med stor kunnskap.

Var denne informasjonen nyttig?

Hvor fornøyd er du med språkkvaliteten?
Hva påvirket opplevelsen din?
Når du trykker på Send inn, blir tilbakemeldingen brukt til å forbedre Microsoft-produkter og -tjenester. IT-administratoren kan samle inn disse dataene. Personvernerklæring.

Takk for tilbakemeldingen!

×