Logga in med Microsoft
Logga in eller skapa ett konto.
Hej,
Välj ett annat konto.
Du har flera konton
Välj det konto som du vill logga in med.

Sammanfattning

När du automatiserar en Office-produkt från Visual Basic kan det vara bra att flytta en del av koden till en Microsoft Visual Basic for Applications-modul (VBA) som kan köras inom serverns processutrymme. Det kan öka den övergripande körningshastigheten för programmet och hjälpa till att lösa problem om servern bara utför en åtgärd när ett samtal pågår.

Den här artikeln visar hur du dynamiskt lägger till en VBA-modul i ett Office-program från Visual Basic och sedan anropar makrot för att fylla ett kalkylblad i processen.

Mer information

I följande exempel visas hur du infogar en kodmodul i Microsoft Excel, men du kan använda samma teknik för Word och PowerPoint eftersom båda använder samma VBA-motor.

I exemplet används en statisk textfil för den kodmodul som är infogad i Excel. Du kanske vill flytta koden till en resursfil som du kan kompilera till programmet och sedan extrahera till en tillfällig fil vid körning. Det skulle göra projektet mer hanterbart för omdistribution.

Från och Microsoft Office XP måste en användare bevilja åtkomst till VBA-objektmodellen innan automationskod som skrivits för att manipulera VBA fungerar. Det här är en ny säkerhetsfunktion med Office XP. Mer information finns i följande Knowledge Base-artikel:

282830 Programmeringsåtkomst till Office XP VBA Project nekas

Steg för att skapa exemplet

  1. Skapa först en ny textfil med namnet KbTest.bas (utan .txt. Det här är kodmodulen som vi infogar Excel i körningen.

  2. Lägg till följande rader med kod i textfilen:

       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. Spara textfilen i katalogen C:\KbTest.bas och stäng sedan filen.

  4. Börja Visual Basic och skapa ett vanligt projekt. Formulär1 skapas som standard.

  5. På menyn Project klickar du på Slutledning och väljer sedan lämplig typ av biblioteksversion så att du kan använda tidig bindning till Excel.

    Välj till exempel något av följande:

    • För Microsoft Office Excel 2007 väljer du 12.0-biblioteket.

    • För Microsoft Office Excel 2003 väljer du 11.0-biblioteket.

    • För Microsoft Excel 2002 väljer du 10.0-biblioteket.

    • För Microsoft Excel 2000 väljer du 9.0-biblioteket.

    • För Microsoft Excel 97 väljer du 8.0-biblioteket.

  6. Lägg till en knapp i Formulär1 och placera följande kod i hanteraren för knappens Klick-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. För Excel 2002 och för senare versioner Excel måste du aktivera åtkomst till VBA-projektet. Detta gör du på något av följande sätt:

    • I Excel 2007 klickar du på Microsoft Office och sedan på Alternativ Excel alternativ. Klicka på Säkerhetscenter och sedan på Säkerhetscenter Inställningar. Klicka på Inställningar, markera kryssrutan Lita på Access till VBA-projektobjektmodellen och klicka sedan på OK två gånger.

    • I Excel 2003 och i tidigare versioner Excel du på Makro på menyn Verktyg och klickar sedan på Säkerhet. I dialogrutan Säkerhet klickar du på fliken Betrodda källor och markerar kryssrutan Åtkomst till betrodda Visual Basic Project betrodda källor.

  8. Kör Visual Basic projekt.

Referenser

Mer information om automatisering av Office från Visual Basic finns på webbplatsen Office support för utveckling på följande adress:

http://support.microsoft.com/ofd

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.

Communities hjälper dig att ställa och svara på frågor, ge feedback och få råd från experter med rika kunskaper.

Hade du nytta av den här informationen?

Hur nöjd är du med språkkvaliteten?
Vad påverkade din upplevelse?
Genom att trycka på skicka, kommer din feedback att användas för att förbättra Microsofts produkter och tjänster. IT-administratören kan samla in denna data. Sekretesspolicy.

Tack för din feedback!

×