Trending News
MSFlex Grid 儲存成 Excel 檔
想請問VB的專家:
要如何將製作好的表單儲存成Excel檔?而且每筆資料要分開,例如:第一筆資料為22,第二筆資料為33,那在Excel的儲存格裡應該A1=22、B1=33 這兩筆資料是要分開的,而不是
A1=22 33 全部的資料都跑進A1格裡。
麻煩專家們幫我解答,謝謝!!
感謝Eneru大大提供,但可不可以麻煩您說明一下內容呢?因為我只是初學者,還不太了解副程式的使用,麻煩您!!
還有,為什麼VB程式會說以下這三段為"使用者自訂型態未定義"呢?
Dim objXL As New Excel.Application
Dim wbXL As New Excel.Workbook
Dim wsXL As New Excel.Workshee
3 Answers
- EneruLv 41 decade agoFavorite Answer
我給你一個程式..它是不管是使用datagrid或是MSFlex Grid都適用
你拿去用吧
Private Sub cmdToExcel_Click()
Dim intRowCounter As Integer
Dim intColCounter As Integer
intRowCounter = MSFGrid3.Rows
intColCounter = MSFGrid3.Cols
End Sub
Public Sub BaseSetOpdaysch_To_Excel(TheFlexgrid As MSFlexGrid, TheRows As Integer, TheCols As Integer, Optional GridStyle As Integer = 1, _
Optional WorkSheetName As String)
Dim intCol As Integer ' counter
Dim intRow As Integer ' counter
Dim objXL As New Excel.Application
Dim wbXL As New Excel.Workbook
Dim wsXL As New Excel.Worksheet
' 判斷是否試算表物件是否存在。
If Not IsObject(objXL) Then
MsgBox "你必須要有Microsoft Office才能使用此功能!!!", vbExclamation, "轉換至Excel"
Exit Sub
End If
On Error Resume Next
' 開啟 Excel。
objXL.Visible = True
Set wbXL = objXL.Workbooks.Add
Set wsXL = objXL.ActiveSheet
' name the worksheet
With wsXL
If Not WorkSheetName = "" Then
.Name = WorkSheetName
End If
End With
' 填入 worksheet。
For intRow = 1 To TheRows
For intCol = 1 To TheCols
With TheFlexgrid
wsXL.Cells(intRow + 1, intCol).Value = .TextMatrix(intRow - 1, intCol - 1) & " "
End With
Next intCol
Next intRow
'EXCEL 欄位合併
Dim STRMyRange
For i = 1 To 3
If i = 1 Then
STRMyRange = "A1:K1"
ElseIf i = 2 Then
STRMyRange = "A2:F2"
ElseIf i = 3 Then
STRMyRange = "G2:K2"
End If
With Range(STRMyRange)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
wsXL.Range(STRMyRange).MergeCells = True '釋放記憶體
Next
' 調整 Excel 最適欄寬。
For intCol = 1 To TheCols
wsXL.Columns(intCol).AutoFit
wsXL.Range("a1", Right$(wsXL.Columns(TheCols).AddressLocal, 1) & TheRows).AutoFormat GridStyle
Next intCol
Set wbXL = Nothing
Set objXL = Nothing
Set objSETA = Nothing
End Sub
2008-04-24 13:48:25 補充:
忘了打上這一行
請在cmdToExcel_Click()裡,end sub 前一行打上以下這一行
Call BaseSetOpdaysch_To_Excel(MSFGrid3, intRowCounter, intColCounter)
2008-04-26 04:31:40 補充:
尚未定義是你在com元件未加入excel元件
你可以在工具,按右鍵選擇-->"設定使用元件",再選擇-->"物件",找出並勾選-->"Microsoft Excel工作表
這意即可
至於程式的解說
我的Mail:eneru.alumi@gmail.com
即時通:eneru_mygod
我可以為你說明
2008-04-27 00:30:22 補充:
你說將程式後的二行刪掉就正常
這是正確的
我之所以會加後面調整欄寬是因為有時在資料庫欄位設定是屬不定的欄寬
而後面這2行就是依欄位的寬而加的,所以在當你轉入EXCEL 時會出現MASSAGE這是正常的
只要按"取消"即可,你可以從圖四很明顯的看到你的第五齒與第六齒的間隔
這可以很明顯看出,在當時規劃TABLE時我們是否有疏忽掉欄位寬度,而造成以後在程式裡很多沒必要的麻煩與找 bug
你把最後2行拿掉就是屬依EXCEL自定的欄寬,這也是可行的
並無不對,
2008-04-27 00:30:38 補充:
你注意看一下你的圖五,
是不是在A1~G1有一空行
它是在以下成式做成的
For intRow = 1 To TheRows
For intCol = 1 To TheCols
With TheFlexgrid
wsXL.Cells(intRow + 1, intCol).Value = .TextMatrix(intRow - 1, intCol - 1) & " "
End With
Next intCol
Next intRow
2008-04-27 00:30:44 補充:
就是紅色地方加上1所造成的
這個部份是轉入EXCEL的核心
它可以讓我們隨心所欲的更改我們要讓資料顯示在第幾列
好讓我們可以在上一列加上我們一些TITLE的資料
如,印表日期...相關資料...
其它的部份你有問題就再問吧
2008-04-27 00:31:43 補充:
wsXL.Cells(intRow + 1, intCol).Value = .TextMatrix(intRow - 1, intCol - 1) & " "
因在此無法設定顏色...所以我特地在重心標明
- 6 years ago
我本來從沒遇到過修NAS修硬碟和隨身碟要資料救援,一開始也跟大家一樣總是問價格到處比價,因為不懂,凡事都從價格,考量,輕言聽信朋友介紹比較便宜一家,找錯家之後痛苦尾隨而來,以下省略500字........,後來自己上網找資料救援找到硬碟醫院,和他們經理溝通之後給我正確觀念,這是妳寶貴的資料,妳要考慮是救不救的回問題,而不是貴不貴問題,如果重要請找對人搶救NAS資料硬碟救援才能恢復你的NAS中多顆的硬碟資料
- Anonymous7 years ago
【亞洲36588合法彩券公司直營 官網: A36588.NET 】
【 最新活動→迎接新會員,首存狂送20% 】
【運動→電子→對戰→現場→彩球 】
【免費服務 →電影區、討論區、KTV歡唱、運動轉播、即時比分、24H客服 】
【亞洲36588合法彩券公司直營 官網: A36588.NET 】