Accedi con Microsoft
Accedi o crea un account.
Salve,
Seleziona un altro account.
Hai più account
Scegli l'account con cui vuoi accedere.

Riepilogo

Quando si automatizza un prodotto Office da Visual Basic, può essere utile spostare parte del codice in un modulo di Microsoft Visual Basic, Applications Edition (VBA) che può essere eseguito all'interno dello spazio di processo del server. In questo modo è possibile aumentare la velocità di esecuzione complessiva per l'applicazione e alleviare i problemi se il server esegue un'azione solo quando viene effettuata una chiamata in-process.

Questo articolo illustra come aggiungere dinamicamente un modulo VBA a un'applicazione Office in esecuzione da Visual Basic e quindi chiamare la macro per riempire un foglio di lavoro in-process.

Ulteriori informazioni

L'esempio seguente illustra l'inserimento di un modulo di codice in Microsoft Excel, ma è possibile usare la stessa tecnica per Word e PowerPoint perché entrambi incorporano lo stesso motore VBA.

L'esempio usa un file di testo statico per il modulo di codice inserito in Excel. È consigliabile spostare il codice in un file di risorse che è possibile compilare nell'applicazione e quindi estrarre in un file temporaneo quando necessario in fase di esecuzione. In questo modo il progetto sarebbe più gestibile per la ri distribuzione.

A partire da Microsoft Office XP, un utente deve concedere l'accesso al modello a oggetti VBA prima che il codice di automazione scritto per modificare VBA funzioni. Questa è una nuova funzionalità di sicurezza con Office XP. Per altre informazioni, vedere il seguente articolo della Knowledge Base:

282830 Accesso a livello di programmazione Office l Project VBA di XP è negato

Procedura per creare l'esempio

  1. Prima di tutto, creare un nuovo file di testo denominato KbTest.bas (senza .txt estensione). Questo è il modulo di codice che verrà inserito in Excel in fase di esecuzione.

  2. Nel file di testo aggiungere le righe di codice seguenti:

       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. Salvare il file di testo nella directory C:\KbTest.bas, quindi chiudere il file.

  4. Iniziare Visual Basic creare un progetto standard. Form1 viene creato per impostazione predefinita.

  5. Nel menu Project fare clic su Riferimenti e quindi selezionare la versione appropriata della libreria dei tipi che consente di usare l'associazione anticipata per Excel.

    Ad esempio, selezionare una delle opzioni seguenti:

    • Per Microsoft Office Excel 2007, selezionare la raccolta 12.0.

    • Per Microsoft Office Excel 2003, selezionare la raccolta 11.0.

    • Per Microsoft Excel 2002, selezionare la raccolta 10.0.

    • Per Microsoft Excel 2000, selezionare la raccolta 9.0.

    • Per Microsoft Excel 97, selezionare la raccolta 8.0.

  6. Aggiungere un pulsante a Form1 e inserire il codice seguente nel gestore per l'evento Click del pulsante:

       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. Per Excel 2002 e per le versioni successive di Excel, è necessario attivare l'accesso al progetto VBA. A tale scopo, utilizzare uno dei seguenti metodi:

    • In Excel 2007 fare clic sul pulsante Microsoft Office e quindi fare clic su Excel opzioni. Fare clic su Centro protezione e quindi su Centro protezione Impostazioni. Fare clic Impostazioni macro, fare clic per selezionare la casella di controllo Considera attendibile l'accesso al modello a oggetti del progetto VBA e quindi fare clic su OK due volte.

    • In Excel 2003 e nelle versioni precedenti di Excel scegliere Macrodal menu Strumenti e quindi fare clic su Sicurezza. Nella finestra di dialogo Sicurezza fare clic sulla scheda Origini attendibili e quindi selezionare la casella di controllo Considera attendibile l'accesso Visual Basic Project attendibilità.

  8. Eseguire il Visual Basic progetto.

Riferimenti

Per altre informazioni sull'automazione dei Office da Visual Basic, vedere il sito del supporto per lo sviluppo di Office all'indirizzo seguente:

http://support.microsoft.com/ofd

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?
Premendo Inviare, il tuo feedback verrà usato per migliorare i prodotti e i servizi Microsoft. L'amministratore IT potrà raccogliere questi dati. Informativa sulla privacy.

Grazie per il feedback!

×