Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1305 / 2272 ツリー ←次へ | 前へ→

【7639】特定のファイルを指定して… TB1 06/4/4(火) 11:45 質問[未読]
【7640】Re:特定のファイルを指定して… たぬき 06/4/4(火) 13:35 回答[未読]
【7641】Re:特定のファイルを指定して… TB1 06/4/4(火) 15:07 質問[未読]
【7642】Re:特定のファイルを指定して… TB1 06/4/4(火) 15:45 質問[未読]
【7643】Re:特定のファイルを指定して… たぬき 06/4/4(火) 17:05 発言[未読]
【7646】Re:特定のファイルを指定して… TB1 06/4/5(水) 10:12 質問[未読]
【7647】Re:特定のファイルを指定して… TB1 06/4/5(水) 11:36 質問[未読]
【7648】Re:特定のファイルを指定して… たぬき 06/4/5(水) 12:36 発言[未読]
【7668】Re:特定のファイルを指定して… TB1 06/4/10(月) 9:41 発言[未読]
【7780】Re:特定のファイルを指定して… TB1 06/4/28(金) 16:19 お礼[未読]
【7781】Re:特定のファイルを指定して… たぬき 06/4/28(金) 16:38 発言[未読]
【7790】Re:特定のファイルを指定して… TB1 06/5/1(月) 17:06 質問[未読]
【7794】Re:特定のファイルを指定して… たぬき 06/5/3(水) 17:04 発言[未読]
【7798】Re:特定のファイルを指定して… TB1 06/5/8(月) 10:25 質問[未読]
【7799】Re:特定のファイルを指定して… たぬき 06/5/8(月) 11:25 発言[未読]
【7800】Re:特定のファイルを指定して… TB1 06/5/9(火) 15:06 質問[未読]
【7802】Re:特定のファイルを指定して… たぬき 06/5/9(火) 15:35 発言[未読]
【7804】Re:特定のファイルを指定して… TB1 06/5/9(火) 16:38 質問[未読]
【7805】Re:特定のファイルを指定して… たぬき 06/5/9(火) 17:15 発言[未読]
【7807】Re:特定のファイルを指定して… TB1 06/5/10(水) 13:15 お礼[未読]

【7639】特定のファイルを指定して…
質問  TB1  - 06/4/4(火) 11:45 -

引用なし
パスワード
   宜しくお願いします。
日々出来てくるCSVファイルをアクセスの特定のテーブルに追加していきたいと思います。

出力先を選択するコードはあるサンプルからとって

Private Sub 出力ファイル選択_Click()
 Dim strFileName As String
 Dim strFilter As String
 Dim blnRet As Boolean
 
 strFilter = "エクセル(*.xls)" & vbNullChar & "*.xls" & vbNullChar & _
       "CSV(*.csv)" & vbNullChar & "*.csv" 
 Me.出力ファイルパス = Null
 blnRet = GetFileName_Save(strFilter, strFileName)
 If blnRet = True Then
  Me.出力ファイルパス = strFileName
 End If
End Sub

Private Sub 出力実行_Click()
 Dim strFileName As String
 Dim strType As String
 
 If IsNull(Me.出力ファイルパス) = True Or Len(Me.出力ファイルパス) = 0 Then
  Exit Sub
 End If
 If IsNull(Me.出力ファイルパス) = True Or Len(Me.出力ファイルパス) = 0 Then
  Exit Sub
 End If
 
 strFileName = Me.出力ファイルパス
 Select Case Right(strFileName, 3)
 
  Case "csv"
   DoCmd.TransferText acExportDelim, , "部品マスタ", strFileName, True
   
  Case Else
   MsgBox "出力対象ファイル形式を選択してください。", vbOKOnly + vbCritical, ""
   
   
   Exit Sub
 End Select
 
 MsgBox "部品マスタ情報を" & Chr(13) & _
     strFileName & Chr(13) & _
     "に出力しました。", vbOKOnly + vbInformation, ""
End Sub

となっていまして、テスト的にやってみると、サンプル上の特定した"部品マスタ"の情報が、指定したエクセルファイルに書き込まれます。

これを、特定ではなく選択したファイルを、選択したアクセスファイルのテーブルに追加書き込みしたいのです。

出力ファイル選択のコードを改造すれば入力ファイルも選択できるかと思ったのですが、簡単では無かったです。
大変漠然としていますが、なにか良い方法があれば教えてください。
宜しくお願いします。

【7640】Re:特定のファイルを指定して…
回答  たぬき  - 06/4/4(火) 13:35 -

引用なし
パスワード
   ▼TB1 さん:

acExportDelimがacImportDelimでは?

【7641】Re:特定のファイルを指定して…
質問  TB1  - 06/4/4(火) 15:07 -

引用なし
パスワード
   ▼たぬき さん:

>acExportDelimがacImportDelimでは?
たぬきさん、ご指摘ありがとうございます。
私、例によってコードがよくわからないまま質問しております。
悪しからずご了承ください。

イメージとしては
_    ______________
|_|   |______________|
ボタン   インポートしたいファイルパス
_    ______________
|_|   |______________|
ボタン   エクスポートしたいファイルパス
              _____
             | 実行  |
             |_____|


みたいなのがあって、AというCSVファイルをBというアクセスファイルに1日ごとの差分をバックアップしていきたいのです。

ご指摘のとおりまずやってみると、インポートしたいパス名が出てきました。しかし、これだけでは意味が無くて、これをエクスポートしたいファイルを選択して実行を押すと、アクセスのテーブルに上書きされているようにしたいのです。

まずはこのサンプルコードから、CSVファイルを特定のエクセルファイルに上書きできるようなコードを教えてもらえませんでしょうか。
宜しくお願いします。

【7642】Re:特定のファイルを指定して…
質問  TB1  - 06/4/4(火) 15:45 -

引用なし
パスワード
   そして、下記☆印で囲んだところが、元々は

DoCmd.TransferText acExportDelim, , "部品マスタ", strFileName, True

となっていたのですが、部品マスタではなく、選択したファイルにしたいので、削除して、実行しました。

----------下記参照------------

Private Sub 出力実行_Click()
 Dim strFileName As String
 Dim strType As String
 
 If IsNull(Me.出力ファイルパス) = True Or Len(Me.出力ファイルパス) = 0 Then
  Exit Sub
 End If
 If IsNull(Me.出力ファイルパス) = True Or Len(Me.出力ファイルパス) = 0 Then
  Exit Sub
 End If
 
 strFileName = Me.出力ファイルパス
 Select Case Right(strFileName, 3)
 
  Case "csv"
 ☆☆DoCmd.TransferText acExportDelim, strFileName, True☆☆
   
  Case Else
   MsgBox "出力対象ファイル形式を選択してください。", vbOKOnly + vbCritical, ""
   
   
   Exit Sub
 End Select
 
 MsgBox "csv情報を" & Chr(13) & _
     strFileName & Chr(13) & _
     "に出力しました。", vbOKOnly + vbInformation, ""
End Sub

すると、そのラインが黄色くなってエラーになりました。当然といえば当然ですが、出力選択で選んだファイルをここに当てはめるにはどうしたらよいのでしょうか。
宜しくお願いします。

【7643】Re:特定のファイルを指定して…
発言  たぬき  - 06/4/4(火) 17:05 -

引用なし
パスワード
   ▼TB1 さん:
まずTransferTextの引数は

acExportDelim等
定義名
テーブル名
ファイル名
見出し行
以下略

DoCmd.TransferText acExportDelim, , Tablename, strFileName, True
のようになると思います。

【7646】Re:特定のファイルを指定して…
質問  TB1  - 06/4/5(水) 10:12 -

引用なし
パスワード
   ▼たぬき さん:
そうなんです。そうすると、特定のファイルからしかインポートされないですよね。そこで、TABLENAME の部分を任意のファイルに置き換えられるようなものにしたいのです。
宜しくお願いします。

【7647】Re:特定のファイルを指定して…
質問  TB1  - 06/4/5(水) 11:36 -

引用なし
パスワード
   実行のコードで

Case "csv"
   DoCmd.TransferText acExportDelim, , Me.入力ファイルパス, strFileName, True

と「部品マスタ」を「入力ファイルパス」に差換えたところ、ファイルパスが見つかりません、とエラー3011が出ました。
リンクするオブジェクトが見つかりません、のエラーです。
どうしたらいいかわかりません。
教えてください。

【7648】Re:特定のファイルを指定して…
発言  たぬき  - 06/4/5(水) 12:36 -

引用なし
パスワード
   ▼TB1 さん:
ACCESSからEXCELにデータを書き出すことをエクスポート(出力)
EXCELからACCESSにデータを持ってくることをインポートとします。(入力)

エクスポートはファイルが存在すれば上書きされます。xlsファイル
インポートの場合テーブルにデータが追加されます。

>実行のコードで
>
>Case "csv"
>   DoCmd.TransferText acExportDelim, , Me.入力ファイルパス, strFileName, True
>
>と「部品マスタ」を「入力ファイルパス」に差換えたところ、ファイルパスが見つかりません、とエラー3011が出ました。
>リンクするオブジェクトが見つかりません、のエラーです。
>どうしたらいいかわかりません。
>教えてください。

Me.入力ファイルパス
この部分はACCESS側のテーブルあるいはクエリーを指定する場所です。
あまり変えるような場所ではないと思いますが・・・
テキストボックスに出力したいテーブルやクエリーを書けば問題は
ありません。

しかし「入力ファイルパス」の文字から、書き込みたいファイルの
場所や名前を指定したいように見受けられます。
strFileNameの場所に書けばそのファイルが作成されます。

ちなみに出力する先の設定はACCESS2000の場合ならコモンダイアログ
を使うのが便利です。
http://homepage1.nifty.com/MADIA/vb/API/GetSaveFileName.htm

【7668】Re:特定のファイルを指定して…
発言  TB1  - 06/4/10(月) 9:41 -

引用なし
パスワード
   たぬきさん
報告送れてすみません。
いまテスト中です。結果を後ほど報告します。
宜しくお願いします。

【7780】Re:特定のファイルを指定して…
お礼  TB1  - 06/4/28(金) 16:19 -

引用なし
パスワード
   ▼たぬき さん:
 ご無沙汰しています。
ようやくこちらの作業に取り掛かれるようになりました。

結論から言いますと、以前
_    ______________
|_|   |______________|
ボタン   インポートしたいファイルパス
_    ______________
|_|   |______________|
ボタン   エクスポートしたいファイルパス
              _____
             | 実行  |
             |_____|


みたいなイメージだといいましたが、実はこのとき、エクスポートするファイルを選択するまでも無く、このフォームがある同じアクセスファイルオブジェクトのテーブルに、CSVがインポートされていたようなんです。それまで、どこにエクスポートされているのか全然分からず、これは新たに取り出し先を指定する必要があるのか、と勝手に思い込んでいました。

 そこで、単純にボタンを押すとファイル検索が出来、欄にそのパスが出て、実行を押すとオブジェクト:テーブルに新しくテーブルが作られていて、これで出来た!と思ったんです。

以下そのコードです。

Option Compare Database
Option Explicit

Private Sub 入力ファイル選択_Click()
 Dim strFileName As String
 Dim strFilter As String
 Dim blnRet As Boolean
 
 strFilter = "エクセル(*.xls)" & vbNullChar & "*.xls" & vbNullChar & _
       "CSV(*.csv)" & vbNullChar & "*.csv"
 
 Me.入力ファイルパス = Null
 blnRet = GetFileName_Save(strFilter, strFileName)
 If blnRet = True Then
  Me.入力ファイルパス = strFileName
 End If
 
End Sub
Private Sub 実行_Click()
 Dim strFileName As String
 Dim strType As String
 
 If IsNull(Me.入力ファイルパス) = True Or Len(Me.入力ファイルパス) = 0 Then
  Exit Sub
 End If
 If IsNull(Me.入力ファイルパス) = True Or Len(Me.入力ファイルパス) = 0 Then
  Exit Sub
 End If
 
 strFileName = Me.入力ファイルパス
 Select Case Right(strFileName, 3)
 
  Case "csv"
   DoCmd.TransferText acImportDelim, , Me.入力ファイルパス, strFileName, True
   
  Case Else
   MsgBox "出力対象ファイル形式を選択してください。", vbOKOnly + vbCritical, ""
   
   
   Exit Sub
 End Select
 
 MsgBox "csvファイル" & Chr(13) & _
     strFileName & Chr(13) & _
     "を出力しました。", vbOKOnly + vbInformation, ""
End Sub

で、これを本来設置するアクセスファイルにそのままフォームをコピーして動かしたところ、

Private Sub 入力ファイル選択_Click()
が黄色くなって
GetFileName_Save
が青くなり
コンパイルエラー:subまたはFunctionが定義されていません
と出ました。

正常なファイルと比べてもふたつのコードは違うところは無く、その特定のアクセスファイルに追加したときだけエラーがでます。ためしに移植先のフォルダの中ににまったく別のファイルとしてコピーして走らせたところ、正常に動きました。

 問題は他のフォームやクエリーを持つその既存アクセスファイルなのかとも思いますが、どこをどう変えたらいいのかわかりません。
どうぞヒントをください。
---------------------------------
 と書いたのですが、またまたポカミスでGetfilename のプロシージャーをコピーし忘れていました。これは独自関数で、APIを用いることでダイアログボックスを表示させることが出来る、そうです。このへん勉強しないとわかりません。
Getが青くなったということは、そんな関数ないよ、ということだったのですね。
他に指摘する点があれがご指導ください。

そんなわけでお礼と結果報告でした。ありがとうございました。

【7781】Re:特定のファイルを指定して…
発言  たぬき  - 06/4/28(金) 16:38 -

引用なし
パスワード
   ▼TB1 さん:
下の方の話題でもでてきていましたが
ACCESSの隠し関数Wizhook関数もあります。
一度検索してみてください。

【7790】Re:特定のファイルを指定して…
質問  TB1  - 06/5/1(月) 17:06 -

引用なし
パスワード
   ▼たぬき さん:
いまさらの質問で申し訳ないのですが、
CSVは無事アクセステーブルへ取り込むことができるようになりました。
そうすると日にちごとにテーブルが作成されますよね。
これを1つのテーブルに累積していくことは可能でしょうか。
出来上がったテーブルをクエリでひとつにまとめる、というのではなく、ファイルを取り込む際に、ひとつの特定テーブルに追加していきたいのです。

ヒントがあれば、教えてください。
宜しくお願いします。

【7794】Re:特定のファイルを指定して…
発言  たぬき  - 06/5/3(水) 17:04 -

引用なし
パスワード
   ▼TB1 さん:
え?
DoCmd.TransferText acImportDelim, , "ddd", "C:\hoge.csv"
って指定するとdddテーブルにどんどんたまっていきませんか?

>▼たぬき さん:
>いまさらの質問で申し訳ないのですが、
>CSVは無事アクセステーブルへ取り込むことができるようになりました。
>そうすると日にちごとにテーブルが作成されますよね。
>これを1つのテーブルに累積していくことは可能でしょうか。
>出来上がったテーブルをクエリでひとつにまとめる、というのではなく、ファイルを取り込む際に、ひとつの特定テーブルに追加していきたいのです。
>
>ヒントがあれば、教えてください。
>宜しくお願いします。

【7798】Re:特定のファイルを指定して…
質問  TB1  - 06/5/8(月) 10:25 -

引用なし
パスワード
   ▼たぬき さん:
お返事遅くなってすみませんでした。

>▼TB1 さん:
>え?
>DoCmd.TransferText acImportDelim, , "ddd", "C:\hoge.csv"
>って指定するとdddテーブルにどんどんたまっていきませんか?

なんですが、これに該当するコードは
Case "csv"
DoCmd.TransferText acImportDelim, , Me.入力ファイルパス, strFileName, True

でしょうか。

現状では入力ファイルパスに取り込みたい1日分のcsvを指定して、実行をクリックすると、そのアクセスファイルオブジェクトのテーブルエリアに、その1日分のテーブルが出来上がるようになっています。

上記の例で言うと、
"C:\hoge.csv"が Me.入力ファイルパス にあたるんですよね。
そうすると"ddd"はどこに当たるのでしょうか。

すみませんがよろしくご教授ください。

【7799】Re:特定のファイルを指定して…
発言  たぬき  - 06/5/8(月) 11:25 -

引用なし
パスワード
   ▼TB1 さん:

"ddd"はACCESSのテーブル名です。
ここにCSVのデータが追加されます。


>▼たぬき さん:
>お返事遅くなってすみませんでした。
>
>>▼TB1 さん:
>>え?
>>DoCmd.TransferText acImportDelim, , "ddd", "C:\hoge.csv"
>>って指定するとdddテーブルにどんどんたまっていきませんか?
>
>なんですが、これに該当するコードは
> Case "csv"
>DoCmd.TransferText acImportDelim, , Me.入力ファイルパス, strFileName, True
>
>でしょうか。
>
>現状では入力ファイルパスに取り込みたい1日分のcsvを指定して、実行をクリックすると、そのアクセスファイルオブジェクトのテーブルエリアに、その1日分のテーブルが出来上がるようになっています。
>
>上記の例で言うと、
>"C:\hoge.csv"が Me.入力ファイルパス にあたるんですよね。
>そうすると"ddd"はどこに当たるのでしょうか。
>
>すみませんがよろしくご教授ください。

【7800】Re:特定のファイルを指定して…
質問  TB1  - 06/5/9(火) 15:06 -

引用なし
パスワード
   ▼たぬき さん:
現状で

DoCmd.TransferText acImportDelim, , Me.入力ファイルパス, strFileName, True

としていて、このコードを実行するとMe.入力ファイルパスで指定した日毎のcsvファイルがテーブルとして出来上がります。しかし、テーブルは実行するごとに出来上がり、ひとつのテーブルに追加貼り付けされていくものではありません。

DoCmd.TransferText acImportDelim, , "ddd", "C:\hoge.csv"

で照らし合わせるとstrFileNameが集計されていくテーブルと考えて良いでしょうか。
私のコードでは1つのテーブルに溜まっていきません。どこが違うのでしょうか。

【7802】Re:特定のファイルを指定して…
発言  たぬき  - 06/5/9(火) 15:35 -

引用なし
パスワード
   ▼TB1 さん:
>DoCmd.TransferText acImportDelim, , X, strFileName
Xの位置はテーブル名を意味しています。

"ddd"と指定してdddのテーブルがなければdddというテーブルを
作ります。
dddというテーブルがすでにあればデータを追加します。

この位置をMe.入力ファイルパスと指定すると、そこに指定され
た値のテーブル名を作ります。
毎回違えば、テーブルがどんどんできます。

【7804】Re:特定のファイルを指定して…
質問  TB1  - 06/5/9(火) 16:38 -

引用なし
パスワード
   ▼たぬき さん:
何度もすみません。
当方の作ったフォームでは、
入力ファイルパスの部分を選択できるようにしていて
(例:c:\日計フォルダ\20060505.csv)実行ボタンを押すとテーブルが出来上がります。

>>DoCmd.TransferText acImportDelim, , X, strFileName
>Xの位置はテーブル名を意味しています。
>"ddd"と指定してdddのテーブルがなければdddというテーブルを
>作ります。
>dddというテーブルがすでにあればデータを追加します。

ということですが、ここはフォームで取得したいcsvを選択するため、
  Me.入力ファイルパス
とする必要があります。当然日毎に新しくテーブルが出来ます。

つまり、このフォームでは、csvデータをひとつのテーブルに蓄積することは不可能、と考えて良いでしょうか。

いったん日毎にテーブルをつくり、それを集計するテーブルをクエリなどでつくる、と考えるべきでしょうか。

【7805】Re:特定のファイルを指定して…
発言  たぬき  - 06/5/9(火) 17:15 -

引用なし
パスワード
   ▼TB1 さん:

DoCmd.TransferText acImportDelim, , Me.入力ファイルパス, strFileName
DoCmd.TransferText acImportDelim, , "全部”, strFileName
2回書けばいいのでは・・・

指定したテーブルがじゃんじゃんできるし・・・・
「全部テーブル」にはどんどんデータが貯まるし・・・・

【7807】Re:特定のファイルを指定して…
お礼  TB1  - 06/5/10(水) 13:15 -

引用なし
パスワード
   ▼たぬき さん:
すみませんでした。大きな勘違いをしていました。
DoCmd.TransferText acImportDelim, , Me.入力ファイルパス, strFileName
で、Me.入力ファイルパス は、指定したcsvファイルのことだとばかり思ってました。実は、strFileName がそれに当たるんですよね。Me.入力ファイルパスとstrFileName を混同して、出力したいテーブルのことだと気づきませんでした。
つまり、従来のコードでは、

指定したcsvファイルの名前でテーブルを作ろうとする→見当たらないので新しくテーブルが出来上がる

ということだったのですね。 現在は、
DoCmd.TransferText acImportDelim, , 集計, strFileName
としたので
集計というテーブルに、strFileName で指定したcsvファイルが追加される
という解釈で良いでしょうか。
誤解等ありましたらご指摘ください。

長々とありがとうございました。

1305 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free