VB是常用的應用軟體開發工具之一,由於VB的報表功能有限,而且一但報表格式發生變化,就得相應修改程式,給應用軟體的維護工作帶來極大的不便。因此有很多程式設計師現在已經充分利用EXECL的強大報表功來實現報表功能。但由於VB與EXCEL由於分別屬於不同的應用系統,如何把它們有機地結合在一起,是一個值得我們研究的課題。
一、 VB讀寫EXCEL表:
VB本身提自動化功能可以讀寫EXCEL表,其方法如下:
1、在工程中引用Microsoft Excel型別庫:
從"工程"選單中選擇"引用"欄;選擇Microsoft Excel 9.0 Object Library(EXCEL2000),然後選擇"確定"。表示在工程中要引用EXCEL型別庫。
2、在通用物件的宣告過程中定義EXCEL物件:
Dim xlApp As Excel.Application
Dim xlBook As Excel.WorkBook
Dim xlSheet As Excel.Worksheet
3、在程式中操作EXCEL表常用命令:
Set xlApp = CreateObject("Excel.Application") "建立EXCEL物件
Set xlBook = xlApp.Workbooks.Open("檔名") "開啟已經存在的EXCEL工件簿檔案
xlApp.Visible = True "設定EXCEL物件可見(或不可見)
Set xlSheet = xlBook.Worksheets("表名") "設定活動工作表
xlSheet.Cells(row, col) =值 "給單元格(row,col)賦值
xlSheet.PrintOut "列印工作表
xlBook.Close (True) "關閉工作簿
xlApp.Quit "結束EXCEL物件
Set xlApp = Nothing "釋放xlApp物件
xlBook.RunAutoMacros (xlAutoOpen) "執行EXCEL啟動宏
xlBook.RunAutoMacros (xlAutoClose) "執行EXCEL關閉宏
4、在運用以上VB命令操作EXCEL表時,除非設定EXCEL物件不可見,否則VB程式可繼續執行其它操作,也能夠關閉EXCEL,同時也可對EXCEL進行操作。但在EXCEL操作過程中關閉EXCEL物件時,VB程式無法知道,如果此時使用EXCEL物件,則VB程式會產生自動化錯誤。形成VB程式無法完全控制EXCEL的狀況,使得VB與EXCEL脫節。
二、 EXCEL的宏功能:
EXCEL提供一個Visual Basic編輯器,開啟Visual Basic編輯器,其中有一工程屬性視窗,點選右鍵選單的"插入模組",則增加一個"模組1",在此模組中可以運用Visual Basic語言編寫函式和過程並稱之為宏。其中,EXCEL有兩個自動宏:一個是啟動宏(Sub Auto_Open()),另一個是關閉宏(Sub Auto_Close())。它們的特性是:當用EXCEL打含有啟動宏的工簿時,就會自動執行啟動宏,同理,當關閉含有關閉宏的工作簿時就會自動執行關閉宏。但是透過VB的自動化功能來呼叫EXCEL工作表時,啟動宏和關閉宏不會自動執行,而需要在VB中透過命令xlBook.RunAutoMacros (xlAutoOpen)和xlBook.RunAutoMacros (xlAutoClose) 來執行啟動宏和關閉宏。
三、 VB與EXCEL的相互勾通:
充分利用EXCEL的啟動宏和關閉宏,可以實現VB與EXCEL的相互勾通,其方法如下:
在EXCEL的啟動宏中加入一段程式,其功能是在磁碟中寫入一個標誌檔案,同時在關閉宏中加入一段刪除此標誌檔案的程式。VB程式在執行時透過判斷此標誌檔案存在與否來判斷EXCEL是否開啟,如果此標誌檔案存在,表明EXCEL物件正在執行,應該禁止其它程式的執行。如果此標誌檔案不存在,表明EXCEL物件已被使用者關閉,此時如果要使用EXCEL物件執行,必須重新建立EXCEL物件。
四、舉例:
Dim xlApp As Excel.Application "定義EXCEL類
Dim xlBook As Excel.Workbook "定義工件簿類
Dim xlsheet As Excel.Worksheet "定義工作表類
Private Sub Command1_Click() "開啟EXCEL過程
If Dir("D:\temp\excel.bz") = "" Then "判斷EXCEL是否開啟
Set xlApp = CreateObject("Excel.Application") "建立EXCEL應用類
xlApp.Visible = True "設定EXCEL可見
Set xlBook = xlApp.Workbooks.Open("D:\temp\bb.xls") "開啟EXCEL工作簿
Set xlsheet = xlBook.Worksheets(1) "開啟EXCEL工作表
xlsheet.Activate "啟用工作表
xlsheet.Cells(1, 1) = "abc" "給單元格1行駛列賦值
xlBook.RunAutoMacros (xlAutoOpen) 執行EXCEL中的啟動宏
Else
MsgBox ("EXCEL已開啟")
End If
End Sub
Private Sub Command2_Click()
If Dir("D:\temp\excel.bz") <> "" Then "由VB關閉EXCEL
xlBook.Close (True) "關閉EXCEL工作簿
xlApp.Quit "關閉EXCEL
Set xlApp = Nothing "釋放EXCEL物件
End
2、在D盤根目錄上建立一個名為Temp的子目錄,在Temp目錄下建立一個名為"bb.xls"的EXCEL檔案。
3、在"bb.xls"中開啟Visual Basic編輯器,在工程視窗中點滑鼠鍵選擇插入模組,在模組中輸入入下程式存檔:
Sub auto_open()
Open "d:\temp\excel.bz" For Output As #1 "寫標誌檔案
Close #1
Sub auto_close()
4、執行VB程式,點選EXCEL按鈕可以開啟EXCEL系統,開啟EXCEL系統後,VB程式和EXCEL分別屬兩個不同的應用系統,均可同時進行操作,由於系統加了判斷,因此在VB程式中重複點選EXCEL按鈕時會提示EXCEL已開啟。如果在EXCEL中關閉EXCEL後再點EXCEL按鈕,則會重新開啟EXCEL。而無論EXCEL開啟與否,透過VB程式均可關閉EXCEL。這樣就實現了VB與EXCEL的無縫連線。
"------------------------------------------------
Private Sub Form_Load() "視窗load過程
Dim myDb As Database
Dim myTb As Recordset
Set myDb = OpenDatabase("c:\data.mdb") "開啟資料庫檔案
Set myTb = myDb.OpenRecordset("xpress") "開啟表文件
If myTb.RecordCount < 4 Then "表文件記錄小於4條退出程式
Set myTb = Nothing
Set myDb = Nothing
Exit Sub
myTb.MoveFirst "記錄指標移動到第一條
myTb.Move 2 "記錄指標向下移動2條即移動到第三條
Text1.Text = myTb!DefaultValue "text1賦值為xpress表的DefaultValue欄位的第三條記錄
myTb.MoveNext "記錄指標下移一條
Text2.Text = myTb!DefaultValue "text2賦值為xpress表的DefaultValue欄位的第四條記錄
Private Sub Command1_Click()
Set myDb = OpenDatabase("c:\data.mdb")
Set myTb = myDb.OpenRecordset("xpress")
myTb.Move 2 "記錄指標下移到第三條
myTb.Edit "資料庫為編輯狀態
myTb!DefaultValue = Text1.Text "資料庫xpress表的DefaultValue欄位第三條賦值為text1的文字
myTb.Update "儲存更改的記錄
myTb.MoveNext "記錄指標下移一條到第四條
myTb.Edit
myTb!DefaultValue = Text2.Text
myTb.Update
VB是常用的應用軟體開發工具之一,由於VB的報表功能有限,而且一但報表格式發生變化,就得相應修改程式,給應用軟體的維護工作帶來極大的不便。因此有很多程式設計師現在已經充分利用EXECL的強大報表功來實現報表功能。但由於VB與EXCEL由於分別屬於不同的應用系統,如何把它們有機地結合在一起,是一個值得我們研究的課題。
一、 VB讀寫EXCEL表:
VB本身提自動化功能可以讀寫EXCEL表,其方法如下:
1、在工程中引用Microsoft Excel型別庫:
從"工程"選單中選擇"引用"欄;選擇Microsoft Excel 9.0 Object Library(EXCEL2000),然後選擇"確定"。表示在工程中要引用EXCEL型別庫。
2、在通用物件的宣告過程中定義EXCEL物件:
Dim xlApp As Excel.Application
Dim xlBook As Excel.WorkBook
Dim xlSheet As Excel.Worksheet
3、在程式中操作EXCEL表常用命令:
Set xlApp = CreateObject("Excel.Application") "建立EXCEL物件
Set xlBook = xlApp.Workbooks.Open("檔名") "開啟已經存在的EXCEL工件簿檔案
xlApp.Visible = True "設定EXCEL物件可見(或不可見)
Set xlSheet = xlBook.Worksheets("表名") "設定活動工作表
xlSheet.Cells(row, col) =值 "給單元格(row,col)賦值
xlSheet.PrintOut "列印工作表
xlBook.Close (True) "關閉工作簿
xlApp.Quit "結束EXCEL物件
Set xlApp = Nothing "釋放xlApp物件
xlBook.RunAutoMacros (xlAutoOpen) "執行EXCEL啟動宏
xlBook.RunAutoMacros (xlAutoClose) "執行EXCEL關閉宏
4、在運用以上VB命令操作EXCEL表時,除非設定EXCEL物件不可見,否則VB程式可繼續執行其它操作,也能夠關閉EXCEL,同時也可對EXCEL進行操作。但在EXCEL操作過程中關閉EXCEL物件時,VB程式無法知道,如果此時使用EXCEL物件,則VB程式會產生自動化錯誤。形成VB程式無法完全控制EXCEL的狀況,使得VB與EXCEL脫節。
二、 EXCEL的宏功能:
EXCEL提供一個Visual Basic編輯器,開啟Visual Basic編輯器,其中有一工程屬性視窗,點選右鍵選單的"插入模組",則增加一個"模組1",在此模組中可以運用Visual Basic語言編寫函式和過程並稱之為宏。其中,EXCEL有兩個自動宏:一個是啟動宏(Sub Auto_Open()),另一個是關閉宏(Sub Auto_Close())。它們的特性是:當用EXCEL打含有啟動宏的工簿時,就會自動執行啟動宏,同理,當關閉含有關閉宏的工作簿時就會自動執行關閉宏。但是透過VB的自動化功能來呼叫EXCEL工作表時,啟動宏和關閉宏不會自動執行,而需要在VB中透過命令xlBook.RunAutoMacros (xlAutoOpen)和xlBook.RunAutoMacros (xlAutoClose) 來執行啟動宏和關閉宏。
三、 VB與EXCEL的相互勾通:
充分利用EXCEL的啟動宏和關閉宏,可以實現VB與EXCEL的相互勾通,其方法如下:
在EXCEL的啟動宏中加入一段程式,其功能是在磁碟中寫入一個標誌檔案,同時在關閉宏中加入一段刪除此標誌檔案的程式。VB程式在執行時透過判斷此標誌檔案存在與否來判斷EXCEL是否開啟,如果此標誌檔案存在,表明EXCEL物件正在執行,應該禁止其它程式的執行。如果此標誌檔案不存在,表明EXCEL物件已被使用者關閉,此時如果要使用EXCEL物件執行,必須重新建立EXCEL物件。
四、舉例:
Dim xlApp As Excel.Application "定義EXCEL類
Dim xlBook As Excel.Workbook "定義工件簿類
Dim xlsheet As Excel.Worksheet "定義工作表類
Private Sub Command1_Click() "開啟EXCEL過程
If Dir("D:\temp\excel.bz") = "" Then "判斷EXCEL是否開啟
Set xlApp = CreateObject("Excel.Application") "建立EXCEL應用類
xlApp.Visible = True "設定EXCEL可見
Set xlBook = xlApp.Workbooks.Open("D:\temp\bb.xls") "開啟EXCEL工作簿
Set xlsheet = xlBook.Worksheets(1) "開啟EXCEL工作表
xlsheet.Activate "啟用工作表
xlsheet.Cells(1, 1) = "abc" "給單元格1行駛列賦值
xlBook.RunAutoMacros (xlAutoOpen) 執行EXCEL中的啟動宏
Else
MsgBox ("EXCEL已開啟")
End If
End Sub
Private Sub Command2_Click()
If Dir("D:\temp\excel.bz") <> "" Then "由VB關閉EXCEL
xlBook.RunAutoMacros (xlAutoClose) "執行EXCEL關閉宏
xlBook.Close (True) "關閉EXCEL工作簿
xlApp.Quit "關閉EXCEL
End If
Set xlApp = Nothing "釋放EXCEL物件
End
End Sub
2、在D盤根目錄上建立一個名為Temp的子目錄,在Temp目錄下建立一個名為"bb.xls"的EXCEL檔案。
3、在"bb.xls"中開啟Visual Basic編輯器,在工程視窗中點滑鼠鍵選擇插入模組,在模組中輸入入下程式存檔:
Sub auto_open()
Open "d:\temp\excel.bz" For Output As #1 "寫標誌檔案
Close #1
End Sub
Sub auto_close()
End Sub
4、執行VB程式,點選EXCEL按鈕可以開啟EXCEL系統,開啟EXCEL系統後,VB程式和EXCEL分別屬兩個不同的應用系統,均可同時進行操作,由於系統加了判斷,因此在VB程式中重複點選EXCEL按鈕時會提示EXCEL已開啟。如果在EXCEL中關閉EXCEL後再點EXCEL按鈕,則會重新開啟EXCEL。而無論EXCEL開啟與否,透過VB程式均可關閉EXCEL。這樣就實現了VB與EXCEL的無縫連線。
"------------------------------------------------
Private Sub Form_Load() "視窗load過程
Dim myDb As Database
Dim myTb As Recordset
Set myDb = OpenDatabase("c:\data.mdb") "開啟資料庫檔案
Set myTb = myDb.OpenRecordset("xpress") "開啟表文件
If myTb.RecordCount < 4 Then "表文件記錄小於4條退出程式
Set myTb = Nothing
Set myDb = Nothing
Exit Sub
End If
myTb.MoveFirst "記錄指標移動到第一條
myTb.Move 2 "記錄指標向下移動2條即移動到第三條
Text1.Text = myTb!DefaultValue "text1賦值為xpress表的DefaultValue欄位的第三條記錄
myTb.MoveNext "記錄指標下移一條
Text2.Text = myTb!DefaultValue "text2賦值為xpress表的DefaultValue欄位的第四條記錄
Set myTb = Nothing
Set myDb = Nothing
End Sub
Private Sub Command1_Click()
Dim myDb As Database
Dim myTb As Recordset
Set myDb = OpenDatabase("c:\data.mdb")
Set myTb = myDb.OpenRecordset("xpress")
myTb.MoveFirst "記錄指標移動到第一條
myTb.Move 2 "記錄指標下移到第三條
myTb.Edit "資料庫為編輯狀態
myTb!DefaultValue = Text1.Text "資料庫xpress表的DefaultValue欄位第三條賦值為text1的文字
myTb.Update "儲存更改的記錄
myTb.MoveNext "記錄指標下移一條到第四條
myTb.Edit
myTb!DefaultValue = Text2.Text
myTb.Update
Set myTb = Nothing
Set myDb = Nothing
End Sub