2008年5月19日 星期一

.Net 2003 Excel2003

這份文件示範如何為 Visual Basic . NET 設定適當的專案參照至 Excel 型別程式庫並提供範例程式碼來自動化 Excel。
建立在 Microsoft Excel 的 Automation 用戶端
1. 啟動 Microsoft Visual Studio .NET。.
2. 在 [ 檔案 ] 功能表, 再按一下 [ New , 及 專案 。 從 Visual Basic 專案類型選取 [ Windows 應用程式 。 根據預設會建立 Form1。.
3. 將參考加入至 Microsoft Excel Object Library 。 如果要執行這項操作,請依照下列步驟執行。: a. 在 [ 專案 ] 功能表, 按一下 [ 加入參考 。
b. 在 [ COM ] 索引標籤, 找出 Microsoft Excel Object Library , 並按一下 選取 。

請注意 Microsoft Office 2003 包括 Primary Interop Assemblies (PIA)。 並未包含 Microsoft Office XP PIA, 但是他們可以下載。 如需有關 Office XP PIA 的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件::
328912 (http://support.microsoft.com/kb/328912/) Microsoft Office XP 主要 Interop 組件 (PIA) 可供下載
c. 按一下 [ 確定 ] 以接受您的選項在 [ 加入參考 ] 對話方塊。

4. 在 [ 檢視 ] 功能表, 選取 工具箱 ] 以顯示 [ 工具箱 ], 然後新增按鈕至 Form 1。
5. 連按兩下 Button 1 。 即會出現在表單的程式碼視窗。
6. 在程式碼視窗中,找出下列程式碼: Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

End Sub

以下列程式碼取代前一個程式碼: Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim oXL As Excel.Application
Dim oWB As Excel.Workbook
Dim oSheet As Excel.Worksheet
Dim oRng As Excel.Range

' Start Excel and get Application object.
oXL = CreateObject("Excel.Application")
oXL.Visible = True

' Get a new workbook.
oWB = oXL.Workbooks.Add
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 = Excel.XlVAlign.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).
oRng = oSheet.Range("C2", "C6")
oRng.Formula = "=A2 & "" "" & B2"

' Fill D2:D6 with a formula(=RAND()*100000) and apply format.
oRng = oSheet.Range("D2", "D6")
oRng.Formula = "=RAND()*100000"
oRng.NumberFormat = "$0.00"

' AutoFit columns A:D.
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 Excel's lifetime.
oXL.Visible = True
oXL.UserControl = True

' Make sure that you release object references.
oRng = Nothing
oSheet = Nothing
oWB = Nothing
oXL.Quit()
oXL = Nothing

Exit Sub
Err_Handler:
MsgBox(Err.Description, vbCritical, "Error: " & Err.Number)
End Sub

Private Sub DisplayQuarterlySales(ByVal oWS As Excel.Worksheet)
Dim oResizeRange As Excel.Range
Dim oChart As Excel.Chart
Dim oSeries As Excel.Series
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

' Starting at E1, fill headers for the number of columns selected.
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.
oResizeRange = oWS.Range("E2", "E6").Resize(ColumnSize:=iNumQtrs)
oResizeRange.Formula = "=RAND()*100"
oResizeRange.NumberFormat = "$0.00"

' Apply borders to the Sales data and headers.
oResizeRange = oWS.Range("E1", "E6").Resize(ColumnSize:=iNumQtrs)
oResizeRange.Borders.Weight = Excel.XlBorderWeight.xlThin

' Add a Totals formula for the sales data and apply a border.
oResizeRange = oWS.Range("E8", "E8").Resize(ColumnSize:=iNumQtrs)
oResizeRange.Formula = "=SUM(E2:E6)"
With oResizeRange.Borders(Excel.XlBordersIndex.xlEdgeBottom)
.LineStyle = Excel.XlLineStyle.xlDouble
.Weight = Excel.XlBorderWeight.xlThick
End With

' Add a Chart for the selected data.
oResizeRange = oWS.Range("E2:E6").Resize(ColumnSize:=iNumQtrs)
oChart = oWS.Parent.Charts.Add
With oChart
.ChartWizard(oResizeRange, Excel.XlChartType.xl3DColumn, , Excel.XlRowCol.xlColumns)
oSeries = .SeriesCollection(1)
oSeries.XValues = oWS.Range("A2", "A6")
For iRet = 1 To iNumQtrs
.SeriesCollection(iRet).Name = "=""Q" & Str(iRet) & """"
Next iRet
.Location(Excel.XlChartLocation.xlLocationAsObject, oWS.Name)
End With

' Move the chart so as not to cover your data.
With oWS.Shapes.Item("Chart 1")
.Top = oWS.Rows(10).Top
.Left = oWS.Columns(2).Left
End With

' Free any references.
oChart = Nothing
oResizeRange = Nothing
End Sub


7. 將下列程式碼新增至 Form1.vb 頂端::Imports Microsoft.Office.Core



測試自動化用戶端
1. 按下 F5 以建置並執行程式。.
2. 在表單, 按一下 Button 1 。 這個程式會啟動 Excel 並填入新的工作表上的資料。
3. 當出現提示要輸入每季的銷售資料, 請按一下 [ 是 ] 。 一個圖表為連結至每季的資料加入至工作表。

2008年5月1日 星期四

Word 開啟文件自動執行

Sub AutoOpen()