? asked in 電腦與網際網路程式設計 · 1 decade ago

MSFlex Grid 儲存成 Excel 檔

想請問VB的專家:

要如何將製作好的表單儲存成Excel檔?而且每筆資料要分開,例如:第一筆資料為22,第二筆資料為33,那在Excel的儲存格裡應該A1=22、B1=33 這兩筆資料是要分開的,而不是

A1=22 33 全部的資料都跑進A1格裡。

麻煩專家們幫我解答,謝謝!!

Update:

感謝Eneru大大提供,但可不可以麻煩您說明一下內容呢?因為我只是初學者,還不太了解副程式的使用,麻煩您!!

Update 2:

還有,為什麼VB程式會說以下這三段為"使用者自訂型態未定義"呢?

Update 3:

Dim objXL As New Excel.Application

Dim wbXL As New Excel.Workbook

Dim wsXL As New Excel.Workshee

3 Answers

Rating
  • Eneru
    Lv 4
    1 decade ago
    Favorite 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中多顆的硬碟資料

    http://www.datamaster.com.tw/

  • Anonymous
    7 years ago

    【亞洲36588合法彩券公司直營 官網: A36588.NET 】

    【 最新活動→迎接新會員,首存狂送20% 】

    【運動→電子→對戰→現場→彩球 】

    【免費服務 →電影區、討論區、KTV歡唱、運動轉播、即時比分、24H客服 】

    【亞洲36588合法彩券公司直營 官網: A36588.NET 】

Still have questions? Get your answers by asking now.