2001/12/20にしんさんが投稿された件で誰か教えて下さい。
サンプルソース
'Excelへの参照
Set xlsApp = CreateObject("Excel.Application")
'Excelにブックを追加
Set xlsBook = xlsBook.Sheets("Sheet1")
'読み込むcsvファイル名
strFileName = "test.csv"
'空いているファイル番号を取得
intFileNo = FreeFile
'csvファイルを開く
Open strFileName For Input As intFileNo
'ファイルの最後に達するまでループ
Do Until EOF(intFileNo)
'読み込んだ行数をカウント
intRow = intRow + 1
'1行分のデータを読み込む
For intCol = 1 To 5
'ファイルから読み込んだ内容を変数に保存
Input #intFileNo, strRecBuff
'変数の内容をExcelに送る
xlsSheet.Cells(intRow, intCol) = strRecBuff
Next
Loop
'Excelを表示
xlsBook.Application.Visible = True
'csvファイルを閉じる
Close intFileNo
'オブジェクトを解放
Set xlsSheet = Nothing
Set xlsBook = Nothing
Set xlsApp = Nothing
列数をカウントするループロジックの部分で
For intCol = 1 To 5
とありますが、これを 1 To 257にし、
csvデータが5000行(1行:256項目)あるものをコマンドボタンからExcelで表示しようとした時、フリーズしてしまします。
このような膨大なデータを扱う場合、パフォーマンスを上げる良い方法はないでしょうか?
Excel Object を使うのなら、
Applicationオブジェクトのメソッドで
直接インポートしたほうが速いでしょう。
インポート、というよりcsvを読み込んで
xls形式で保存するだけなのですが・・・。
コードについては、一度Excel上で
マクロの自動記録をOnにして
手動でインポートしてみてください。
私が最初にやろうとしてた事は、下記内容に関係あるように思います。
●VBからExcel操作を行う回数に制限がある。(Visual Basicのバグみたい)
・32768回
現象:VBからExcelを操作できる回数(ExcelApp.XXXの数)である。
この回数を超えると、Excelが固まりVBに戻らなくなる。
回避:Excelのプロセスを殺すとVBにエラーで戻れる。
・16384回
現象:VBからExcelを操作して、最後にExcelを表示にする処理を
作成した場合に、表示にしたExcelを終了しても、Excelのプロセスが非表示で裏に残ってしまう。
回避:Excelのプロセスを殺すしかない。
Sayさんのやり方でうまくいきそうに思うのですが、やり方が今ひとつわかりません。詳しい方法を教えて戴けないでしょうか?
VBとExcelは初心者なので、理解が及ばないこともありますがよろしくお願いします。
表示できればいいのなら、たとえば、
Set xlsBook = xlsApp.WorkBooks.Open("C:\CSVFOLDER\Test.csv")
xlsApp.Visible = True
とか・・・。