|
>Hirohumiさんの
>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
|
|