返回列表 上一主題 發帖

[發問] 如何將超過65536筆以上的資料放入活頁簿,請家族高手賜教

你好:
  請先試試是否可行
Sub tt()
   
    '請先設定引用Microsoft Scripting Runtime
   
    Dim mFso As Scripting.FileSystemObject
    Dim mTxt As Scripting.TextStream
    Dim mStr As String
    Dim mPath$, mFile$
    Dim ar(), ar1(), ar2()
    Dim s%, s1 As Long, s2 As Long, m%, m1%, i%, j%
    Dim mSplit
   
   
    mPath = "C:\Documents and Settings\mine\My Documents\"
    mFile = "SAS檔轉TXT檔的結果.txt"
   
    Set mFso = CreateObject("Scripting.FileSystemObject")   
    Set mTxt = mFso.OpenTextFile(Filename:=mPath & mFile, IOMode:=ForReading)   
    With mTxt
        Do Until .AtEndOfStream
            mStr = .ReadLine
            mSplit = Split(mStr)
            For s = 0 To UBound(mSplit)
                ReDim Preserve ar(s)
                ar(s) = mSplit(m)
                m = m + 1
            Next
            
            ReDim Preserve ar1(s1)
            ar1(s1) = ar
            s1 = s1 + 1
            
            m = 0
            Erase ar
            
            If s1 > 65536 Then
                ReDim Preserve ar2(s2)
                ar2(s2) = ar1
                s2 = s2 + 1
                Erase ar1
                s1 = 0
            End If
           
         Loop
        .Close
    End With
   
    Erase ar1
    s1 = 0
   
    m1 = Worksheets.Count
    For i = m1 + 1 To s2
        Worksheets.Add
    Next
   
    For s1 = 0 To UBound(ar2)
      
        Worksheets(s1 + 1).Range("a1").Resize(65536, 24) = Application.Transpose(Application.Transpose(ar2(s1)))
    Next        
   
    Set mTxt = Nothing                                    
    Set mFso = Nothing   
   
End Sub

TOP

回復 10# pupai
試試看
SAS檔轉TXT檔的結果.txt 只有5056列的資料 尚未達 65536列
  1. Sub Ex()
  2.     Dim TheFile  As String, Mystr As Variant
  3.     Dim Sh As Integer, i As Long
  4.     TheFile = "D:\TEST\SAS檔轉TXT檔的結果.txt"
  5.     i = 1: Sh = 1
  6.     Open TheFile For Input As #1            '開啟文字檔
  7.     Sheets(Sh).Activate                     'Sh=1: 第1個工作表成為使用中的工作表
  8.     ActiveSheet.Cells.Clear                 '清除作用中工作表所有的儲存格的資料
  9.     Do While Not EOF(1)                     '不是檔案底部時 執行迴圈
  10.         Line Input #1, Mystr                '從已開啟的循序讀取資料,並將資料指定給變數。->mystr
  11.         Mystr = Replace(Mystr, """", "")    '清除 資字串中的 " 符號
  12.         Mystr = Split(Mystr, " ")           '依據自字串中 的(此處是: 一個空白字元) 符號 分割為 傳回一維的陣列
  13.         ActiveSheet.Cells(i, "A").Resize(1, UBound(Mystr) + 1) = Mystr
  14.         i = i + 1                '下一列
  15.         If i > Rows.Count Then   'Rows.Count 列的總數
  16.             i = 1
  17.             Sh = Sh + 1
  18.             On Error GoTo WorkSheet_Add   '工作表數<>Sh 會產生錯誤
  19.             Sheets(Sh).Active             '第 Sh 個工作表成為使用中的工作表
  20.             ActiveSheet.Cells.Clear
  21.         End If
  22.     Loop
  23.     Close #1
  24.     Exit Sub
  25. WorkSheet_Add:   '處裡:  工作表數<> Sh 產生的錯誤
  26.     Sheets.Add AFTER:=Sheets(Sheets.Count)     '新增工作表
  27.     Err.Clear                                  '清除錯誤值
  28.     Resume                                     '重回錯誤的地方
  29. End Sub
複製代碼

TOP

回復 12# GBKEE


謝謝各位的幫忙...
經我測試結果,資料如果小分頁的話可以使用GBKEE的方法
但如果要用EXCEL讀取資料庫的方式,畢竟還是有受限............
尤其活頁簿中的工作表多寡又受限於自己電腦可用的記憶體大小........
所以啊!!~謝謝大家幫忙~

TOP

其實,如果資料多, 用access會比較方便,
當然最重要的是用數據來做什麼.
懂得發問,答案就會在其中

今日の一秒は  明日にない
http://kimbalko-chi.blogspot.com
http://kimbalko.blogspot.com

TOP

印象中 SAS 9.2(含)以後的版本直接支援匯出為 Excel 2007.....資料筆數可以到1,048,576
diabo

TOP

        靜思自在 : 心中常存善解、包容、感思、知足、惜福。
返回列表 上一主題