理解EXCEL的對象模型是對其編程的基礎(chǔ)。EXCEL是以層次結(jié)構(gòu)組織對象的,其對象模型中含有許多不同的對象元素,這些對象元素就是VB可以操縱的。在EXCEL對象的層次結(jié)構(gòu)中,最頂層是Application對象,是Excel本身。從該對象開始往下依次是:
.workbooks對象集,是Application對象的下層,其指的是Excel的工作簿文件。
.worksheets對象集,是Workbooks對象集的下層,它表示的是Excel的一個工作表。
.Cells和Range對象,它們是worksheets對象的下層,它則指向Excel工作表中的一個或多個單元格。
以上介紹的四個對象是Excel中最重要也是用得最多的對象,而且從上面的介紹中也不難看出,要控制Excel中的某個具體對象,如某個工作簿中某一表格中的單元格,就必須從Excel層次結(jié)構(gòu)對象的最上層即Application對象開始遍歷。
如前所述,Application對象位于Excel層次結(jié)構(gòu)對象的最上層,它代表的是Excel自身,我們的應(yīng)用程序理應(yīng)從Application對象的建立開始。VB控制Excel的啟動方式有幾種,在這里我們使用了API調(diào)用,可以確保目前系統(tǒng)中只有一個Excel副本在運(yùn)行,程序代碼和說明如下:
Option Explicit
Public xlapp As Object‘Excel對象
Public xlbook As Object‘工作簿
Public xlsheet As Object‘工作表
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As long,ByVal wMsg As Long, ByVal wParam As Long, lParam_
As Any) As_ Long
以上是公有變量和API函數(shù)應(yīng)在模塊中聲明。
Sub GetExcel()
Dim MyXL As Object '用于存放Microsoft Excel 引用的變量。
Dim ExcelWasNotRunning As Boolean '用于最后釋放的標(biāo)記。
On Error Resume Next '延遲錯誤捕獲。
'不帶第一個參數(shù)調(diào)用 Getobject 函數(shù)將返回對該應(yīng)用程序的實例的引用。
'如果該應(yīng)用程序不在運(yùn)行,則會產(chǎn)生錯誤。
Set MyXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear '如果發(fā)生錯誤則要清除 Err 對象。
'檢測 Microsoft Excel。如果 Microsoft Excel 在運(yùn)行,則將其加入運(yùn)行對象表。
DetectExcel '該過程檢測并登記正在運(yùn)行的 Excel
'設(shè)置其 Application 屬性,顯示 Microsoft Excel。
'然后使用 MyXL 對象引用的 Windows 集合,顯示包含該文件的實際窗口。
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
'如果在啟動時,Microsoft Excel 的這份副本不在運(yùn)行中,
'則使用 Application 屬性的 Quit 方法來關(guān)閉它。
'注意,當(dāng)試圖退出 Microsoft Excel 時,
'標(biāo)題欄會閃爍,并顯示一條消息詢問是否保存所加載的文件。
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End If
Set MyXL = Nothing '釋放對該應(yīng)用程序和電子數(shù)據(jù)表的引用。
End Sub'該過程檢測并登記正在運(yùn)行的 Excel。
Sub DetectExcel()
Const WM_USER = 1024
Dim hwnd As Long
'如果 Excel 在運(yùn)行,則該 API 調(diào)用將返回其句柄。
hwnd = FindWindow("XLMAIN", 0)
If hwnd = 0 Then '0 表示沒有 Excel 在運(yùn)行。
Exit Sub
Else
'Excel 在運(yùn)行,因此可以使用 SendMessage API'函數(shù)將其放入運(yùn)行對象表。
SendMessage hwnd, WM_USER + 18, 0, 0
End If
End Sub
有了Application對象,就可以非常方便地訪問Excel應(yīng)用程序中的其它對象,以及這此對象的屬性和方法。
2.2 workbooks對象的使用
dim xlbook as object ‘定義一個指向工作簿變量
set xlbook=xlapp.application.workbooks.add
使用ADD方法新建一個空白的工作簿。
2.3 worksheets對象的使用
dim xlsheet as object ‘定義一個指向工作表的變量
set xlsheet=xlapp.application.workshets.add
或者:set xlsheet=xlapp.application.worksheet(1) ‘指向當(dāng)前工作簿的第一頁
2.4 Cells和Range對象的應(yīng)用
引用一個工作表(xlsheet)中的某個單位格用以下代碼:
xlsheet.cells(I,j)=100 ‘表示在第I行第J列中寫入100這個數(shù)。
引用工作表中的多個單位格用以下代碼:
With xlsheet '設(shè)置邊框為是實際上線
.Range(.Cells(7,1),.Cells(28,29)).Borders.LineStyle = xlContinuous
End With
模板可以存在指定的文件夾里,也可以在于Excel存放模板的文件夾里。
打開VB編程環(huán)境,選擇新建一標(biāo)準(zhǔn)工程。要想在VB中很好地調(diào)用Excel,首先必須打開VB編程環(huán)境“工程”菜單中的“引用”項目,并選取項目中的“Microsoft Excel8.0 object library項。然后在窗體中加入一命令按鈕,其caption屬性為:Excel輸出。
即command1.caption= Excel輸出。
以下是代碼,其中模塊中的代碼和上面介紹的application使用代碼是一樣的,不再列出。
Private Sub Command1_Click()
Dim i, j As Integer
Call GetExcel
Set xlapp = GetObject("土工試驗成果表.XLS") '打開模扳文件
xlapp.Parent.Windows(1).Visible = True '使父窗體可見
Set xlsheet = xlapp.Application.Worksheets(1)'當(dāng)前工作簿的第一頁
For i = 7 To 28‘這段代碼是將整數(shù)1到29寫入單位格中,實際應(yīng)用時可
For j = 1 To 29 ‘讀一數(shù)據(jù)文件并按要求寫入表格中
xlsheet.Cells(i, j) = j '當(dāng)前工作簿第一頁的第I行第J列
Next j
Next i
With xlsheet '設(shè)置邊框為是實線
.Range(.Cells(7, 1), .Cells(28, 29)).Borders.LineStyle = xlContinuous
End With
xlsheet.SaveAs "d:\temp\w2.xls" ‘按指定文件名存盤
' 引用當(dāng)前工作簿的第二頁
Set xlsheet = xlapp.Application.Worksheets(2)
xlsheet.Cells(7, 2) = 789 ‘在第二頁的第7行第2列寫入789
Set xlbook = xlapp.Application.Workbooks.Add '新建一空白工作簿
End Sub
聯(lián)系客服