1)創建Excel對象
Excel對象模型包括了128個不同的對象,從矩形、文字方塊等簡單的對
象到透視表,圖表等複雜的對象。下面簡單介紹一下其中最重要,也是用
得最多的五個對象。
(1)Application對象
Application對象處於Excel對象層次結構的頂層,表示 Excel自身的
運行環境。
(2)Workbook對象
Workbook對象直接地處於Application對象的下層,表示一個Excel工
作薄文件。
(3)Worksheet對象
Worksheet對象包含於Workbook對象,表示一個Excel工作表。
(4)Range對象
Range對象包含於Worksheet對象,表示 Excel工作表中的一個或多個
單元格。
(5)Cells對象
Cells對象包含於Worksheet對象,表示Excel工作表中的一個單元格。
如果要啓動一個Excel,使用Workbook和Worksheet對象,下面的代碼
啓動了Excel並創建了一個新的包含一個工作表的工作薄:
Dim zsbexcel As Excel.Application
Set zsbexcel = New Excel.Application
zsbexcel.Visible = True
如要Excel不可見,可使zsbexcel.Visible = False
zsbexcel.SheetsInNewWorkbook = 1
Set zsbworkbook = zsbexcel.Workbooks.Add
2)設置單元格和區域值
要設置一張工作表中每個單元格的值,可以使用Worksheet對象的
Range屬性或Cells屬性。
With zsbexcel.ActiveSheet
.Cells(1, 2).value = "100"
.Cells(2, 2).value = "200"
.Cells(3, 2).value = "=SUM(B1:B2)"
.Range("A3:A9") = "中國人民解放軍"
End With
要設置單元格或區域的字體、邊框,可以利用Range對象或Cells對象
的Borders屬性和Font屬性:
With objexcel.ActiveSheet.Range("A2:K9").Borders '邊框設置
.Line = xlBorderLine
.Weight = xlThin
.ColorIndex = 1
End With
With objexcel.ActiveSheet.Range("A3:K9").Font'字體設置
.Size = 14
.Bold = True
.Italic = True
.ColorIndex = 3
End With
通過對Excel單元格和區域值的各種設置的深入瞭解,可以創建各種複
雜、美觀、滿足需要的、具有自己特點的報表。
3)預覽及列印
生成所需要的工作表後,就可以對EXCEL發出預覽、列印指令了。
zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait '
設置列印方向
zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4'
設置列印紙的打下
zsbexcel.Caption = "列印預覽" '設置預覽視窗的
標題
zsbexcel.ActiveSheet.PrintPreview'列印預覽
zsbexcel.ActiveSheet.PrintOut'列印輸出
通過列印方向、列印紙張大小的設置,不斷進行預覽,直到滿意爲止,
最終進行列印輸出。
爲了在退出應用程式後EXCEL不提示用戶是否保存已修改的檔,需使
用如下語句:
zsbexcel.DisplayAlerts = False
zsbexcel.Quit '退出EXCEL
zsbexcel.DisplayAlerts = True
如此設計的報表列印是通過 EXCEL程式來後台實現的。對於使用者來
說,根本看不到具體過程,只看到一張張漂亮的報表輕易地被列印出來了。
4)具體實例
下麵給出一個具體實例,它在window98、Visual Basic 6.0、
Microsoft Office97的環境下調試通過。
在VB中啓動一個新的Standard EXE工程,在“工程”菜單的“引用”
選項下引用Excel Object Library;然後在Form中添加一個命令按鈕
cmdExcel;最後在窗體中輸入如下代碼:
Dim zsbexcel As Excel.Application
Private Sub cmdExcel_Click()
Set zsbexcel = New Excel.Application
zsbexcel.Visible = True
zsbexcel.SheetsInNewWorkbook = 1
Set zsbworkbook = zsbexcel.Workbooks.Add
With zsbexcel.ActiveSheet.Range("A2:C9").Borders'邊框設置
.Line = xlBorderLine
.Weight = xlThin
.ColorIndex = 1
End With
With zsbexcel.ActiveSheet.Range("A3:C9").Font'字體設置
.Size = 14
.Bold = True
.Italic = True
.ColorIndex = 3
End With
zsbexcel.ActiveSheet.Rows.HorizontalAlignment =
xlVAlignCenter'水準居中
zsbexcel.ActiveSheet.Rows.VerticalAlignment =
xlVAlignCenter'垂直居中
With zsbexcel.ActiveSheet
.Cells(1, 2).value = "100"
.Cells(2, 2).value = "200"
.Cells(3, 2).value = "=SUM(B1:B2)"
.Cells(1, 3).value = "中國人民解放軍"
.Range("A3:A9") = "50"
End With
zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait '
xlLandscape
zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4
zsbexcel.ActiveSheet.PrintOut
zsbexcel.DisplayAlerts = False
zsbexcel.Quit
zsbexcel.DisplayAlerts = True
Set zsbexcel = Nothing
提高EXCEL中VBA的效率
方法1:盡量使用VBA原有的屬性、方法和Worksheet函數
由於Excel對象多達百多個,對象的屬性、方法、事件多不勝數,對于初學者來
說可能對它們不全部瞭解,這就産生了編程者經常編寫與Excel對象的屬性、方法相
同功能的VBA代碼段,而這些代碼段的運行效率顯然與Excel對象的屬性、方法完成
任務的速度相差甚大。例如用Range的屬性CurrentRegion來返回 Range 對象,該對
象代表當前區。(當前區指以任意空白行及空白列的組合爲邊界的區域)。同樣功能
的VBA代碼需數十行。因此編程前應盡可能多地瞭解Excel對象的屬性、方法。
充分利用Worksheet函數是提高程式運行速度的極度有效的方法。如求平均工資
的例子:For Each c In Worksheet(1).Range(″A1:A1000″)
Totalvalue = Totalvalue + c.value
Next
Averagevalue = Totalvalue / Worksheet(1).Range(″
A1:A1000″).Rows.Count
而下面代碼程式比上面例子快得多:
Averagevalue="/blog/Application.WorksheetFunction.Average(Worksheets
(1).Range(″A1:A1000″))
其它函數如Count,Counta,Countif,Match,Lookup等等,都能代替相同功能的
VBA程式代碼,提高程式的運行速度。
方法2:盡量減少使用對象引用,尤其在循環中
每一個Excel對象的屬性、方法的調用都需要通過OLE介面的一個或多個調用,
這些OLE調用都是需要時間的,減少使用對象引用能加快VBA代碼的運行。例如
1.使用With語句。
Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.Name=″Pay″
Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.Font
...
則以下語句比上面的快
With Workbooks(1).Sheets(1).Range(″A1:A1000″).Font
.Name = ″Pay″
.Font = ″Bold″
...
End With
2.使用對象變量。
如果你發現一個對象引用被多次使用,則你可以將此對象用Set 設置爲對象變
量,以減少對對象的訪問。如:
Workbooks(1).Sheets(1).Range(″A1″).value = 100
Workbooks(1).Sheets(1).Range(″A2″).value = 200
則以下代碼比上面的要快:
Set MySheet = Workbooks(1).Sheets(1)
MySheet.Range(″A1″).value = 100
MySheet.Range(″A2″).value = 200
3.在循環中要盡量減少對象的訪問。
For k = 1 To 1000
Sheets(″Sheet1″).Select
Cells(k,1).value = Cells(1,1).value
Next k
則以下代碼比上面的要快:
Set Thevalue = Cells(1,1).value
Sheets(″Sheet1″).Select
For k = 1 To 1000
Cells(k,1).value = Thevalue
Next k
方法3:減少對象的啟動和選擇
如果你的通過錄制宏來學習VBA的,則你的VBA程式裏一定充滿了對象的啟動和選
擇,例如Workbooks(XXX).Activate、Sheets(XXX).Select、Range(XXX).Select等
,但事實上大多數情況下這些操作不是必需的。例如
Sheets(″Sheet3″).Select
Range(″A1″).value = 100
Range(″A2″).value = 200
可改爲:
With Sheets(″Sheet3″)
.Range(″A1″).value = 100
.Range(″A2″).value = 200
End With
方法4:關閉螢幕更新
如果你的VBA程式前面三條做得比較差,則關閉螢幕更新是提高VBA程式運行速度
的最有效的方法,縮短運行時間2/3左右。關閉螢幕更新的方法:
Application.ScreenUpdate = False
請不要忘記VBA程式運行結束時再將該值設回來:
Application.ScreenUpdate = True
相關閱讀...
Excel VBA 使用函數範例參考之一
Excel VBA 使用函數範例參考之二
Excel VBA 使用函數範例參考之三
Excel VBA 使用函數範例參考之五
Excel VBA 使用函數範例參考之六
沒有留言:
張貼留言