こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

AccessでCSVをインポートしたい(VBA)

お世話になります。AccessVBA暦2週間の初心者です。
AccessでCSVをインポートできたらいいなと思い
↓下のサイトにあるVBAサンプルを参考にして以下のようにプログラミングをしました。
http://memo.bz/access/advance/csvinpsam


Public Function SplitTest()
On Error GoTo myError

Dim dbs As Database
Dim rst As Recordset
Dim varData As Variant
Dim lngFileNum As Long
Dim strData As String
Dim xSQL As String

FileName = TestGetFileName

'入力元CSVファイルを開く
lngFileNum = FreeFile()
Open FileName For Input As #lngFileNum

'テーブルを開く
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Data")

'CSVファイルの全レコードを読み込むループ
Do Until EOF(lngFileNum)

'CSVファイルより1件分を読み込み
Line Input #lngFileNum, strData
'カンマで区切って配列に代入
varData = Split(strData, ",", , vbTextCompare)
'各フィールドデータをテーブルに追加
With rst
.AddNew
![Code1] = varData(0)
![Code2] = varData(1)
![TS] = varData(2)
![PM] = varData(3)
![金額] = varData(4)
![摘要] = varData(5)
![メモ] = varData(6)



.Update
End With
Loop

rst.Close
Close #lngFileNum


MsgBox "データの取り込みが終了しました"


Exit Function


myError:
MsgBox "ファイル名を指定してください"

End Function



'CSVファイル選択

Function TestGetFileName() 'ファイル選択
Const ENABLE_WIZHOOK = 51488399
Const DISABLE_WIZHOOK = 0
Dim strFile As String
Dim intResult As Integer
WizHook.Key = ENABLE_WIZHOOK ' WizHook 有効化
intResult = WizHook.GetFileName( _
0, "", "", "", strFile, "", _
"すべてのファイル (*.*)|*.*", _
0, 0, 0, True _
)

WizHook.Key = DISABLE_WIZHOOK ' WizHook 無効化
TestGetFileName = strFile
End Function


ダイアログは普通に開けるのですがインポートが出来ず「ファイル名を指定してください」
というメッセージボックスが出ます。
弄っている部分は ![フィールド1] = varData(0)を ![Code1] = varData(0)にしているぐらいです。
何が悪いのか皆目見当がつきません。
こんな初心者でございますがご教授のほどよろしくお願いします。
(ヒントでも構いません)
説明不足等ございましたらご指摘のほどよろしくお願いします。

投稿日時 - 2011-08-01 17:26:22

QNo.6914238

すぐに回答ほしいです

質問者が選んだベストアンサー

No2です。本来は実行すると真っ先に
「変数の宣言がされていません」という
エラーが出るはずです。


Option Explicit

は、コード表の「ツール」から「オプション」を選択し、
「編集」の項の「変数の宣言を強制する」にチェックが
入っているか確認してください。

投稿日時 - 2011-08-01 18:31:48

補足

と思ったら設定ミスだったようです。
無事解決いたしました本当にありがとうございました。

2011年8月1日 20:03 筆

投稿日時 - 2011-08-01 20:03:25

お礼

piroin654さん
分かりやすい回答ありがとうございます。

以下のように変更しました

Option Compare Database
Option Explicit

Public Function SplitTest()

'On Error GoTo myError

Dim dbs As Database
Dim rst As Recordset
Dim varData As Variant
Dim lngFileNum As Long
Dim strData As String
Dim xSQL As String
Dim FileName As String

FileName = TestGetFileName

'入力元CSVファイルを開く
lngFileNum = FreeFile()
Open FileName For Input As #lngFileNum
------------------以下略------------------

csvファイルには

00210,137,1,0,700,ゲンキンAAAAA,ゲンキンイコウ

というデータが1件入っておりますが
実行した際、「このコレクションには項目がありません。」
と出てしまいますね。
ここから先は自分の力で頑張りたいなと思います。

投稿日時 - 2011-08-01 19:58:14

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

FileName が変数宣言されていません。

Public Function SplitTest()



Dim FileName As String

を追加。

コードを書くときは、必ず

Option Compare Database
Option Explicit

をモジュールの先頭に設定しておくこと。

投稿日時 - 2011-08-01 18:18:24

ANo.1

>Set rst = dbs.OpenRecordset("Data")

追加しようとしているテーブル名が"Data"でないのでは?

投稿日時 - 2011-08-01 18:02:54

お礼

o_chi_chiさん 早速の回答ありがとうございます。
開くテーブル名は一致してたので問題はないかと思います。

投稿日時 - 2011-08-01 19:59:31

あなたにオススメの質問