[リストへもどる]
一括表示

投稿時間:2002/11/07(Thu) 19:23
投稿者名:tokumori
Eメール:tokumori@c.do-up.com
URL :
タイトル:
VB6.0からEXCEL97へのデータ入力でのエラーについて
はじめまして。
tokumoriと申します。

VB6.0を用いてプログラムの開発を行っているのですが、以下のような症状が解消出来ません。
ご存知の方お力添えをお願いします。

・環境
 OS:Win95(OSR2)もしくはWin98
 開発ソフト:VB6.0
 連携アプリ:EXCEL97

上記環境にて、別のプログラムで作成した複数CSVファイルを一つのブックの複数シートに入力しようと考えています。
(A.csv→sheet1へ、B.csv→sheet2へという具合に)
VBからエクセルを起動して、シートごとにデータを入力開始するところまでは出来たのですが、データ数の合計が30000を超えた辺りでエクセルがフリーズしてしまいます。(Win95およびWin98でテスト)
正確なデータ数は数えていませんが、フリーズするポイントは毎回同じです。

試しに、別の環境(Win2000・EXCEL2000)で実行してみたところ作業が完了しました。

ソースは以下のようなものを組んでいます。
 For l=1 to 7
    Open A For Input As #FNo
        Do Until j = X
            For i = 1 To Y
                Input #FNo, strData
                xl.worksheets(l).Cells(j, i).Value = strData
            Next i
            j = j + 1
        Loop
    Close #FNo
  Next l
この部分の実行前に、シートをファイル数だけ作成(l=7枚)し、あらかじめ読出元ファイルAの行数をカウントしてXとしています。
また、列数iはあらかじめ決まっている値Yを用いています。
およそのデータ数は、X=1000、Y=25ぐらいのデータです。

検索はして見たつもりですが、以前に同じようなスレッド、Q&Aがあった場合はご容赦ください。
よろしくお願いします。

投稿時間:2002/11/07(Thu) 21:27
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: VB6.0からEXCEL97へのデータ入力でのエラーについて
>                 xl.worksheets(l).Cells(j, i).Value = strData
Cellsの繰り返しは、ハングアップの元だったりします。
http://support.microsoft.com/default.aspx?scid=kb;ja;JP414107


> 上記環境にて、別のプログラムで作成した複数CSVファイルを
> 一つのブックの複数シートに入力しようと考えています。

ADOと、Jet用OLE DB Provider 4.0を使って作成する方法もあります。
(この方法だとは、Excelがインストールされていない環境でも作成できます)

Option Explicit

Private Sub Form_Load()
    Dim strWorkName As String
    Dim strCSVFolder As String
    Dim strCSVName As String
    Dim strExcelFileFullPath As String
    Dim Cn As ADODB.Connection
    Dim SQL As String

    strCSVFolder = "C:\USER\"
    strWorkName = "~tmpVB.dat"
    strExcelFileFullPath = "C:\USER\Excel.xls"

    If Dir(strExcelFileFullPath) <> "" Then
        Kill strExcelFileFullPath
    End If
    With CreateObject("ADOX.Catalog")
        .Create "Provider=Microsoft.Jet.OLEDB.4.0;" _
            & "Data Source=" & strCSVFolder & strWorkName
    End With

    Set Cn = New ADODB.Connection
    Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    Cn.Open strCSVFolder & strWorkName

    strCSVName = Dir(strCSVFolder & "*.csv")
    Do Until strCSVName = ""
        SQL = "SELECT * INTO ["
        SQL = SQL & "Excel 8.0;Database=" & strExcelFileFullPath
        SQL = SQL & "].["
        SQL = SQL & Replace(strCSVName, ".", "_")
        SQL = SQL & "] FROM ["
        SQL = SQL & "text;HDR=NO;FMT=Delmited;Database=" & strCSVFolder
        SQL = SQL & "].[" & strCSVName & "]"

        Cn.Execute SQL

        strCSVName = Dir()
    Loop
    Cn.Close
    Set Cn = Nothing
End Sub

投稿時間:2002/11/08(Fri) 06:35
投稿者名:tokumori
Eメール:tokumori@c.do-up.com
URL :
タイトル:
Re^2: VB6.0からEXCEL97へのデータ入力でのエラーについて
原因ばかりか、代わりの手段まで説明して頂きありがとうございます。
社内的な問題で、どうしてもWin95(or98)を使わねばならず症状が仕様だったらどうしようか悩んでいたところでした。
早速、試して見ます。