|
▼Hirofumi さん:
エラー出ずにうまくいきましたありがとうございました。
またの機会もよろしくお願いします。(^_^)
>>If vntField(i) Like vntKey Thenこの部分で
>>インデックスが範囲を超えていますと出てしまいました。
>>いかがでしょうか
>
>多分こう言うエラー出るなら、読み込むCsvに
>
>'探索を行う、ListBoxに表示する列数(CSV先頭から7列)
>Private Const clngColumns As Long = 7
>
>で指定しているだけの列が無いのだと思います
>例えば、上記でCsv先頭から7列を探索事に成ってますが?
>実際のCsvが6列なら、当然エラーに成ります
>
>以下を修正して下さい
>
>Private Sub CommandButton1_Click()
>
> Dim i As Long
> Dim j As Long
> Dim dfn As Integer
> Dim strBuff As String
> Dim strRec As String
> Dim blnMulti As Boolean
> Dim vntField As Variant
> Dim vntKey As Variant
> Dim lngCount As Long '★追加
>
> 'TextBox1に値が設定されて居なければ
> If TextBox1.Text = "" Then
> Beep
> Exit Sub
> Else
> 'TextBox1の値をKey文字とする
> vntKey = Trim(TextBox1.Text)
> End If
>
> 'ListBoxをクリア
> ListBox1.Clear
>
> 'CsvファイルをOpen
> dfn = FreeFile
> Open vntFileName For Input As dfn
>
> Do Until EOF(dfn)
> '1行読み込み
> Line Input #dfn, strBuff
> '論理レコードに物理レコードを追加
> strRec = strRec & strBuff
> '論理レコードをフィールドに分割
> vntField = SplitCsv(strRec, ",", , , blnMulti)
> 'フィールド内で改行が無い場合
> If Not blnMulti Then
> '実データ列数が予定データ数より小さい場合の処理
> lngCount = UBound(vntField) '★追加
> If lngCount > clngColumns - 1 Then '★追加
> lngCount = clngColumns - 1 '★追加
> End If '★追加
> 'Csv先頭から7列の中にKey文字が含まれるか検査
>' For i = 0 To clngColumns - 1
> For i = 0 To lngCount '★変更
> '含まれている場合
> If vntField(i) Like vntKey Then
> Exit For
> End If
> Next i
> 'レコードにKey文字が有った場合
>' If i <= clngColumns - 1 Then
> If i <= lngCount Then '★変更
> 'ListBox1に項目を追加
> With ListBox1
> .AddItem vntField(0)
>' For j = 1 To clngColumns - 1
> For j = 1 To lngCount '★変更
> .List(.ListCount - 1, j) = vntField(j)
> Next j
> End With
> End If
> strRec = ""
> End If
> Loop
>
> Close #dfn
>
>End Sub
|
|