Gjelder for
Microsoft Office Professional Edition 2003 Excel 2010

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.