Come automatizzare Microsoft Excel da Visual Basic
Riepilogo
Questo articolo illustra come creare e modificare Excel usando Automazione di Visual Basic.
Ulteriori informazioni
Esistono due modi per controllare un server di Automazione: usando l'associazione tardiva o l'associazione anticipata. Con l'associazione tardiva, i metodi non vengono associati fino a quando la fase di esecuzione e il server di automazione non vengono dichiarati come Oggetto. Con l'associazione anticipata, l'applicazione conosce in fase di progettazione il tipo esatto di oggetto con cui comunicherà e può dichiarare i relativi oggetti come tipo specifico. Questo esempio usa l'associazione anticipata, considerata migliore nella maggior parte dei casi perché offre prestazioni migliori e maggiore sicurezza dei tipi.
Per eseguire l'associazione anticipata a un server di Automazione, è necessario impostare un riferimento alla libreria dei tipi di tale server. In Visual Basic questa operazione viene eseguita tramite la finestra di dialogo Riferimenti disponibile in Project | Menu Riferimenti. Per questo esempio, sarà necessario aggiungere un riferimento alla libreria dei tipi per Excel prima di poter eseguire il codice. Vedere i passaggi seguenti su come aggiungere il riferimento.
Compilazione dell'esempio di automazione
Avviare Visual Basic e creare un nuovo progetto EXE Standard. Form1 viene creato per impostazione predefinita.
Fare clic suProgetto e quindi su Riferimenti. Verrà visualizzata la finestra di dialogo Riferimenti. Scorrere verso il basso l'elenco fino a trovare la libreria di oggetti di Microsoft Excel e quindi selezionare l'elemento per aggiungere un riferimento a Excel. Se la libreria di oggetti corretta per la versione di Excel non viene visualizzata nell'elenco, assicurarsi che la versione di Excel sia installata correttamente.
Note
- Se si automatizza Microsoft Office Excel 2007, la libreria dei tipi viene visualizzata come Libreria oggetti di Microsoft Excel 12.0 nell'elenco Riferimenti.
- Se si automatizza Microsoft Office Excel 2003, la libreria dei tipi viene visualizzata come Libreria oggetti di Microsoft Excel 11.0 nell'elenco Riferimenti.
- Se si automatizza Microsoft Excel 2002, la libreria dei tipi viene visualizzata come Libreria oggetti di Microsoft Excel 10.0 nell'elenco Riferimenti
- Se si automatizza Microsoft Excel 2000, la libreria dei tipi viene visualizzata come Libreria oggetti di Microsoft Excel 9.0 nell'elenco Riferimenti .
- Se si automatizza Microsoft Excel 97, la libreria dei tipi viene visualizzata come Libreria oggetti di Microsoft Excel 8.0 nell'elenco Riferimenti
Fare clic su OK per chiudere la finestra di dialogo Riferimenti .
Aggiungere un controllo CommandButton a Form1.
Nella finestra del codice per Form1 inserire il codice seguente:
Option Explicit Private Sub Command1_Click() Dim oXL As Excel.Application Dim oWB As Excel.Workbook Dim oSheet As Excel.Worksheet Dim oRng As Excel.Range 'On Error GoTo Err_Handler ' Start Excel and get Application object. Set oXL = CreateObject("Excel.Application") oXL.Visible = True ' Get a new workbook. Set oWB = oXL.Workbooks.Add Set oSheet = oWB.ActiveSheet ' Add table headers going cell by cell. oSheet.Cells(1, 1).Value = "First Name" oSheet.Cells(1, 2).Value = "Last Name" oSheet.Cells(1, 3).Value = "Full Name" oSheet.Cells(1, 4).Value = "Salary" ' Format A1:D1 as bold, vertical alignment = center. With oSheet.Range("A1", "D1") .Font.Bold = True .VerticalAlignment = xlVAlignCenter End With ' Create an array to set multiple values at once. Dim saNames(5, 2) As String saNames(0, 0) = "John" saNames(0, 1) = "Smith" saNames(1, 0) = "Tom" saNames(1, 1) = "Brown" saNames(2, 0) = "Sue" saNames(2, 1) = "Thomas" saNames(3, 0) = "Jane" saNames(3, 1) = "Jones" saNames(4, 0) = "Adam" saNames(4, 1) = "Johnson" ' Fill A2:B6 with an array of values (First and Last Names). oSheet.Range("A2", "B6").Value = saNames ' Fill C2:C6 with a relative formula (=A2 & " " & B2). Set oRng = oSheet.Range("C2", "C6") oRng.Formula = "=A2 & "" "" & B2" ' Fill D2:D6 with a formula(=RAND()*100000) and apply format. Set oRng = oSheet.Range("D2", "D6") oRng.Formula = "=RAND()*100000" oRng.NumberFormat = "$0.00" ' AutoFit columns A:D. Set oRng = oSheet.Range("A1", "D1") oRng.EntireColumn.AutoFit ' Manipulate a variable number of columns for Quarterly Sales Data. Call DisplayQuarterlySales(oSheet) ' Make sure Excel is visible and give the user control ' of Microsoft Excel's lifetime. oXL.Visible = True oXL.UserControl = True ' Make sure you release object references. Set oRng = Nothing Set oSheet = Nothing Set oWB = Nothing Set oXL = Nothing Exit Sub Err_Handler: MsgBox Err.Description, vbCritical, "Error: " & Err.Number End Sub Private Sub DisplayQuarterlySales(oWS As Excel.Worksheet) Dim oResizeRange As Excel.Range Dim oChart As Excel.Chart Dim iNumQtrs As Integer Dim sMsg As String Dim iRet As Integer ' Determine how many quarters to display data for. For iNumQtrs = 4 To 2 Step -1 sMsg = "Enter sales data for" & Str(iNumQtrs) & " quarter(s)?" iRet = MsgBox(sMsg, vbYesNo Or vbQuestion _ Or vbMsgBoxSetForeground, "Quarterly Sales") If iRet = vbYes Then Exit For Next iNumQtrs sMsg = "Displaying data for" & Str(iNumQtrs) & " quarter(s)." MsgBox sMsg, vbMsgBoxSetForeground, "Quarterly Sales" ' Starting at E1, fill headers for the number of columns selected. Set oResizeRange = oWS.Range("E1", "E1").Resize(ColumnSize:=iNumQtrs) oResizeRange.Formula = "=""Q"" & COLUMN()-4 & CHAR(10) & ""Sales""" ' Change the Orientation and WrapText properties for the headers. oResizeRange.Orientation = 38 oResizeRange.WrapText = True ' Fill the interior color of the headers. oResizeRange.Interior.ColorIndex = 36 ' Fill the columns with a formula and apply a number format. Set oResizeRange = oWS.Range("E2", "E6").Resize(ColumnSize:=iNumQtrs) oResizeRange.Formula = "=RAND()*100" oResizeRange.NumberFormat = "$0.00" ' Apply borders to the Sales data and headers. Set oResizeRange = oWS.Range("E1", "E6").Resize(ColumnSize:=iNumQtrs) oResizeRange.Borders.Weight = xlThin ' Add a Totals formula for the sales data and apply a border. Set oResizeRange = oWS.Range("E8", "E8").Resize(ColumnSize:=iNumQtrs) oResizeRange.Formula = "=SUM(E2:E6)" With oResizeRange.Borders(xlEdgeBottom) .LineStyle = xlDouble .Weight = xlThick End With ' Add a Chart for the selected data Set oResizeRange = oWS.Range("E2:E6").Resize(ColumnSize:=iNumQtrs) Set oChart = oWS.Parent.Charts.Add With oChart .ChartWizard oResizeRange, xl3DColumn, , xlColumns .SeriesCollection(1).XValues = oWS.Range("A2", "A6") For iRet = 1 To iNumQtrs .SeriesCollection(iRet).Name = "=""Q" & Str(iRet) & """" Next iRet .Location xlLocationAsObject, oWS.Name End With ' Move the chart so as not to cover your data. With oWS.Shapes("Chart 1") .Top = oWS.Rows(10).Top .Left = oWS.Columns(2).Left End With ' Free any references. Set oChart = Nothing Set oResizeRange = Nothing End Sub
Premere F5 per eseguire il progetto.