機房收費係統之導出為Excel
在學生信息管理係統中,有很多查詢窗體。在機房收費係統中,也不例外。不過,前者隻要求將數據顯示在窗體中,後者則多了一步,即:將查詢到的信息導出為Excel表的形式。
這樣的工作好熟悉,因為在作品展中試過很多次了。那時候,還沒有學數據庫,師父就讓我們用Excel表來存儲數據,以顯示出來。所以,做起來還是比較得心應手的。
第一個窗體,學生查看上機記錄,沒有多想,就直接在導出為Excel命令下編寫代碼:
<span >Private Sub cmdExcel_Click()
'直接創建程序導出到Excel表中
Dim xlsApp As New Excel.Application '定義Excel程序
Dim xlsBook As Excel.Workbook '定義工作簿
Dim xlsSheet As Excel.Worksheet '定義工作表
Dim i As Integer '定義控件的行值
Dim j As Integer '定義控件的列值
If FlexOnlineRecord.Text = "" Then '判斷控件是否有內容
MsgBox "沒有記錄可導出!", vbOKOnly + vbExclamation, "警告"
Exit Sub
Else
Set xlsBook = xlsApp.Workbooks.Add(1) '創建新的工作簿
Set xlsSheet = Excel.ActiveWorkbook.ActiveSheet '創建新的工作表單
For i = 0 To FlexOnlineRecord.Rows - 1 '顯示數據
For j = 0 To FlexOnlineRecord.Cols - 1
xlsSheet.Cells(i + 1, j + 1) = FlexOnlineRecord.TextMatrix(i, j)
Next j
Next i
xlsApp.Visible = True '顯示Excel表格
'Set xlsApp = Nothing '交還控製給Excel
xlsApp.Sheets(1).Columns.EntireColumn.AutoFit '自動調整列寬
End If
End Sub</span>
後來想想,好幾個窗體都要求將查詢結果導入到Excel中,這樣重複的代碼量太多了,何不妨自己添加一個過程,到時候直接調用就可以了。於是,在模塊中添加了一個名為ExportToExcel的過程,
<span >Public Sub ExportToExcel(FormName As Form, flex As MSFlexGrid) </span>
<span > '導出為Excel表的過程,前者為當前工作的窗體名,後者為控件名。
Dim xlsApp As Object
Dim xlsBook As Object
Dim xlsSheet As Object
Screen.MousePointer = vbHourglass
Set xlsApp = New Excel.Application
Set xlsBook = xlsApp.Workbooks.Add
Set xlsSheet = xlsBook.Worksheets(1)
On Error GoTo Err_proc
Dim i As Integer
Dim j As Integer
With flex '將數據寫入Excel表中
For i = 0 To .Rows - 1
For j = 0 To .Cols - 1
xlsSheet.Cells(i + 1, j + 1).Value = "'" & .TextMatrix(i, j)
Next j
Next i
End With
xlsApp.Sheets(1).Columns.EntireColumn.AutoFit '自動調整列寬
xlsApp.Visible = True
Screen.MousePointer = vbDefault
Exit Sub
Err_proc:
Screen.MousePointer = vbDefault
MsgBox "請確認您的電腦已安裝Excel,或是否安裝正確!", vbExclamation, "機房收費係統"
End Sub
</span>
其中,也許有的電腦上沒有安裝Excel程序,所以可以事先進行錯誤處理。有了這樣一個過程,就方便多了,第二個窗體,......,後麵的窗體,就可以在導出為Excel命令下直接編寫代碼為:
<span >Private Sub cmdExcel_Click()
Call ExportToExcel(frmInquireRechargeRecord, MSFlexRechargeRecord) ’調用導出為Excel表過程
End Sub</span>
這樣確實簡單很多,但文章的主要目的不是為了展示編寫的代碼,好讓我們省事。而是,我想,其實,很多時候,解決問題的方法都不隻隻是一種,每個人思考的不同,方法也就會有所不同。代碼的編寫,也不是唯一的,隻要自己思考過,即使運行失敗了,也算是一種成功。
最後更新:2017-04-03 07:57:17