| 
    
     |  | ▼cocoa さん: こんにちは。
 
 > 毎回1〜7行を削除して実行していたのですが、
 > 実際のデータ部分(8行目)
 
 1行目を飛ばす処理がプログラムに入っているので
 実際に削ったのは2〜7行目でしょうか。
 
 
 多少変更を加えて下記の様にしてみました。
 
 Private Sub EventLogAccess_Click()
 Dim txtData As String
 Dim FNo As Long
 Dim arrData As Variant
 Dim i As Integer
 Dim Con As New ADODB.Connection
 Dim Rec As New ADODB.Recordset
 Dim strFilePath As String
 Dim returnValue As Long
 
 '[ファイルを開く]ダイアログボックスを表示
 WizHook.Key = 51488399
 
 returnValue = WizHook.GetFileName( _
 0, "", "", "", strFilePath, "", _
 "CSVファイル (*.csv)|*.csv", _
 0, 0, 0, True _
 )
 WizHook.Key = 0
 
 '[キャンセル]がクリックされた場合は即終了
 If returnValue <> 0 Then
 Exit Sub
 End If
 
 Set Con = CurrentProject.Connection
 
 Con.Execute "Delete From INPUTDATA"
 Rec.Open "INPUTDATA", Con, adOpenDynamic, adLockOptimistic
 
 FNo = FreeFile
 
 Open strFilePath For Input As #FNo
 
 '先頭〜7行目までを読み飛ばす
 For i = 1 To 7
 Line Input #FNo, txtData
 Next i
 
 On Error GoTo ErrHndl
 'エラーが発生した場合にデータのインポートをなかったこと(ロールバック)
 'にするためにトランザクション処理として実行
 
 Con.BeginTrans
 
 '実際のデータ部分(8行目)から
 'EOF(End Of File)までループ
 
 Do Until EOF(FNo)
 Line Input #FNo, txtData
 arrData = Split(txtData, ",")
 
 '先頭に半角スペースがあった場合はループを抜ける
 If arrData(0) = " " Then
 Exit Do
 Else
 Rec.AddNew
 Rec("xxDate") = Split(arrData(2), " ")(0)
 Rec("xxTime") = Split(arrData(2), " ")(1)
 Rec("ComputerName") = arrData(4)
 Rec("Description1") = Split(arrData(7), "  ")(0)
 Rec("Description2") = Split(arrData(7), "  ")(1)
 Rec.Update
 End If
 Loop
 
 Close #FNo
 Rec.Close
 Set Rec = Nothing
 
 Con.CommitTrans
 Con.Close
 Set Con = Nothing
 
 DoCmd.OpenForm "TimeForm", acPreview
 Exit Sub
 
 ErrHndl:
 
 Close #FNo
 Con.RollbackTrans
 Con.Close
 Set Con = Nothing
 
 MsgBox "以下のエラーが発生したためロールバックしました。" & vbCrLf & _
 Err.Description, vbCritical
 
 End Sub
 
 
 > Rec("Date") = Split(arrData(2), " ")(0)
 > Rec("Time") = Split(arrData(2), " ")(1)
 
 INPUTDATA テーブルの「Date」「Time」という列名は予約語です。
 
 h tp://support.microsoft.com/default.aspx?scid=kb;ja;286335
 
 予約語を列名にすると
 予期しない箇所でエラーが出る事がありますので、
 列名の変更をした方が無難ですね。
 
 
 > DoCmd.RunSQL "Delete From INPUTDATA"
 
 DoCmd は非同期の処理なので
 DELETE が全部終わらない内に
 次の処理が始まる可能性があります。
 
 今回はファイルダイアログを出す処理を挟むので
 特に問題はないと思われますが、
 ADO.Connection の Excute メソッドにて同期処理が取れるので
 変更を加えてあります。
 
 
 |  |