• 締切済み

ACCESS:97→2002のモジュールの変換エラーについて

ACCESS97で作成したファイルをACCESS2002に変換したいのですが、 変換中にコンパイルエラー発生しましたとメッセージが表示されてしまいました。 ファイル自体は変換できておりエラーテーブルを見るとモジュールが変換エラーを起こしていました。そのモジュールを実行させるとやはりエラーが出て止まってしまいます。 ~モジュールの内容は~ テーブルを削除するために削除クエリーの実行(これはうまく動いてます。) フォームに入力されたパスのCSVファイルをインポートする。定義名:CSVインポート定義"インポート先:"CSVテーブル" (これがうまく動かないようです。実行させると「このファイルをインポートできません」とメッセージがでます。) 以下のものになります。 Option Compare Database Option Explicit '------------------------------------------------------------ ' CSVインポート ' '------------------------------------------------------------ Function CSVインポート() On Error GoTo CSVインポート_Err Dim parm1 As String parm1 = Forms!報告書作成!インポートパス & " " ' 入力データ削除query DoCmd.OpenQuery "全て削除クエリー", acNormal, acEdit ' インポート実施 DoCmd.TransferText acImportDelim, "CSVインポート定義", "CSVテーブル", parm1, False, "" CSVインポート_Exit: Exit Function CSVインポート_Err: MsgBox Error$ Resume CSVインポート_Exit End Function もし不足な点がありましたら補足させていただきます。 よろしくお願いします。

みんなの回答

  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.2

Access2000SR-1以降で拡張子がDATや拡張子なしではインポート出来ない仕様(笑)の為という事で宜しいでしょうか? これを解決するには拡張子TXTでインポートするしかないと思います。 例えばインポート前に name parm1 as parm1 & ".TXT" として拡張子を変更し DoCmd.TransferText acImportDelim, "CSVインポート定義", "CSVテーブル", parm1 & ".TXT" , False, "" とするような事をすれば良いかと思います。 過去に回答した内容も参考にして下さい。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=149319
masa2000z28
質問者

お礼

お疲れ様です。 なんどもありがとうございます。 たいへん申し訳ございませんが・・・・解決しました。 原因は <parm1 = Forms!報告書作成!インポートパス & " " > の部分の「" "」の部分のスペースを無くしたらインポートできました じっさい97のときは「" "」でインポート出来たのですが・・・ なぜか2002の場合は「""」としないと認識してくれませんでした。 参考のURLはとてもためになりました。 ありがとうございます。

  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.1

もしかしてインポートしようとしている拡張子がDATとか拡張子なしとかになっていなですか?TXTにしてインポートできればAccess2000のSP1にした時拡張子がDATでインポート出来なくなったのと同様だと思うので拡張子をTXTに変えて作業して見てください。 確認としては手動で普通にインポートして見て同様の結果(エラー)になれば拡張子が原因だと思います。

masa2000z28
質問者

お礼

回答ありがとうございます。 早速手動での確認作業を行いました。 1回目は普通に手動でのインポート 2回目はインポート定義(うまくいかないモジュールで使用していた)を使用しインポート 両方とも問題なくインポートできました。 ・・・という結果です。 すいません補足です。 ACCESSのバージョンですが 古いほうが「ACCESS97-SR2」を使用しています。 新しいほうが「ACCESS2002」になります。 なにか良い手がありましたら宜しくお願いします。

関連するQ&A

  • フォーム内のテキストボックスの値を参照するには?

    モジュールからフォーム上のテキストボックスに入力された値を参照する方法で質問です。 内容としては、テキストボックスに入力された日付(yyyymmdd)をファイル名にもつCSVファイルをインポートするといったものです。 フォーム名:Form1 テキストボックス名:TBox1 インポート元:C:\yyyymmdd.csv インポート先:インポートテーブル モジュール記述先:標準モジュール Function Import() On Error GoTo Import_Err Dim FilePath As String FilePath = "C:\" & Format(Form1. TBox1. Value, "yyyymmdd") & ".csv" DoCmd.TransferText acImportDelim, "インポート定義", "インポートテーブル", FilePath Import_Exit: Exit Function Import_Err: Resume Import_Exit End Function 以上の様なモジュールを組んでみましたがインポート出来ませんでした。 エラーは出ませんでしたが何も起こらないといった状態です。 モジュールの部分についてはなんとなくわかるのですが、フォーム側の設定?がよくわかりません。 あと何をどのようにすればテキストボックス内の値を参照可能になりますでしょうか? 何卒よろしくお願いいたします。

  • Access csvファイルの取り込み

    Access2021 2箇所の保存先の違う所からcsvファイルの取り込みについて伺います。 csv取り込みボタンは、2つ用意しています。 1つ目のボタンに、コード記述して動作確認は正常に動作して他のボタンも正常に動作。 2つ目にのボタンに、csvの格納パス名のみ変更後コード記述して動作確認したら全てのボタンが反応しなくなりました。 動作としては、削除クエリでテーブルのデータを削除してから、指定したフォルダからcsvファイルを選択して取り込ます。 同じテーブルを使用して、格納先の違うcsvファイルを使用する操作になります。 コードは、以下の通りです。 ①ボタン1 Private Sub コマンド61_Click() '削除クエリ実行 DoCmd.SetWarnings False DoCmd.OpenQuery "テーブルデータ削除" DoCmd.SetWarnings True Dim msg As String msg = getFilePicker If msg = "" Then Exit Sub On Error GoTo err_sample DoCmd.TransferText acImportDelim, , "インポート先テーブル名", msg, True MsgBox "インポートが終了しました。", vbInformation + vbOKOnly, "処理完了" Exit Sub err_sample: Select Case Err.Number Case 3011 MsgBox "ファイルが見つかりません。処理を終了します。" Case Else MsgBox Err.Number & ":" & Err.Description End Select End Sub Function getFilePicker(Optional dTitle As String = "ファイル選択") '2003以降 Const msoFileDialogFilePicker As Integer = 3 Dim fDlg As Object Set fDlg = Application.FileDialog(msoFileDialogFilePicker) fDlg.Title = dTitle fDlg.InitialFileName = "csvインポートデータのフォルダパス名①" fDlg.AllowMultiSelect = False fDlg.Filters.Clear fDlg.Filters.Add "すべてのファイル", "*.*" fDlg.Filters.Add "CSV ファイル (*.csv)", "*.csv" fDlg.FilterIndex = 1 If fDlg.Show Then getFilePicker = fDlg.SelectedItems(1) Else getFilePicker = "" Me.Refresh End Function ②ボタン2 Private Sub コマンド62_Click() '削除クエリ実行 DoCmd.SetWarnings False DoCmd.OpenQuery "テーブルデータ削除" DoCmd.SetWarnings True Dim msg As String msg = getFilePicker If msg = "" Then Exit Sub On Error GoTo err_sample DoCmd.TransferText acImportDelim, , "インポート先テーブル名", msg, True MsgBox "インポートが終了しました。", vbInformation + vbOKOnly, "処理完了" Exit Sub err_sample: Select Case Err.Number Case 3011 MsgBox "ファイルが見つかりません。処理を終了します。" Case Else MsgBox Err.Number & ":" & Err.Description End Select End Sub Function getFilePicker(Optional dTitle As String = "ファイル選択") '2003以降 Const msoFileDialogFilePicker As Integer = 3 Dim fDlg As Object Set fDlg = Application.FileDialog(msoFileDialogFilePicker) fDlg.Title = dTitle fDlg.InitialFileName = "csvインポートデータのフォルダパス名②" fDlg.AllowMultiSelect = False fDlg.Filters.Clear fDlg.Filters.Add "すべてのファイル", "*.*" fDlg.Filters.Add "CSV ファイル (*.csv)", "*.csv" fDlg.FilterIndex = 1 If fDlg.Show Then getFilePicker = fDlg.SelectedItems(1) Else getFilePicker = "" Me.Refresh End Function ご教授の程、宜しくお願い致します。

  • SubではなくFunctionで作られる理由

    access2007を使っています。 素朴な疑問なのですがマクロを変換した時はなぜ Subプロシージャーではなく、Functionなのでしょうか? 「クエリを開く」と言うマクロを、VBAに変換したところ ******************************************************* Function マクロ1() On Error GoTo マクロ1_Err DoCmd.OpenQuery "クエリ1", acViewNormal, acEdit マクロ1_Exit: Exit Function マクロ1_Err: MsgBox Error$ Resume マクロ1_Exit End Function ******************************************************* となりました。 戻り値や返り値はないものは、FunctionプロシージャーではなくSubプロシージャーで作るものと思っていたのですが なぜ上記のコードはFunctionなのでしょうか? Functionで作る理由を教えてください。 特に意味はないのでしょうか? ちなみにFunctionをSubに書き換えて実行したら問題なくクエリが開きました。

  • 度々すみませんがインポートのことで・・・

    度々すみません。 どうしてもお伺いしたいのですが csvファイルのインポートを コマンドボタンで行いたいのですが 「外部テーブルのファーマットが正しくありません」と エラーが出てしまいます。 下記に何が問題あるのでしょうか、教えて下さい。 ちなみにファイル名はhead.csvでシート名もheadです。 インポートしたいテーブル名はheadです。 テーブルの形式はすべてあわせてあります。 テーブルをカラにしてみたり ヘッダー部分のみの状態でも同じエラーでした。 Private Sub コマンド3_Click() On Error GoTo Err_コマンド3_Click Dim stDocName As String stDocName = "マクロ1" DoCmd.TransferSpreadsheet acImport, , "head", "C:\My Documents\hea d.csv", True, "head" Exit_コマンド3_Click: Exit Sub Err_コマンド3_Click: MsgBox Err.Description Resume Exit_コマンド3_Click End Sub ---------------------------------------- OSは、Windows 98 アプリケーションは、Access 2000 です ----------------------------------------

  • ACCESS2000でExcelから特定フィールドをインポートしたい

    ACCESS2000でExcelから特定のフィールドをインポートしたいのですが、 うまくいきません。 Excelはフィールド数が254フィールドもあり、 テーブルにインポートしたいフィールド数は30フィールドです。 Excelでは特定フィールドをインポートすることができないようなので、 一時テーブルに全てのフィールドをインポート後 必要なフィールドだけ取り出そうとやってみたのですが、 以下のコードを実行すると、13のフィールドが「解析不能なフィールド」と インポートエラーが出てしまいます。 DoCmd.TransferSpreadsheet acImport, 8, "TEMPテーブル", "c:\data.xls" また、Excelファイルをcsv形式に変換して、インポート定義を作る方法も やってみたのですが、インポート定義作成時に 「フィールド'ID'はインポートまたはエクスポートしようとしている テーブルまたクエリに存在しません」 というエラーが出てしまいます。 どうしたらインポートできるでしょうか。よろしくお願いします。

  • エラー処理について。

    Accessマクロで、VBAに変換する際、「エラー処理コードを追加する。」に チェックを入れると出来る「エラー処理コード」についての質問です。 (1)このエラー処理コードは、プログラムの「異常終了」を防ぐと書いてありましたが、そもそもこの異常終了とはどのようなことを言ってるのでしょうか? (例えば、Accessが何の断りもなく、強制終了するなどといったことでしょうか。) 実際にマクロ(テーブルを開く)で作成されたエラーコードの部分だけを動かしてみて、どんなことになるのか試したいのですが、どうすれば試せるのですか? Function マクロ3() On Error GoTo マクロ3_Err DoCmd.OpenTable "テーブル1", acNormal, acEdit マクロ3_Exit: Exit Function マクロ3_Err: MsgBox Error$ Resume マクロ3_Exit End Function (2)そもそもエラー処理は、Access VBA開発ではかなり重要な要素なのでしょうか? 例えば、テキストボックスに何も入力されてなかったら、「入力してください。」とメッセージボックスを表示させるマクロを作るようなことは、 エラー処理とはまた違うのものなのですか?

  • ACCESSでセキュリティ警告が出る事象について

    ACCESSでセキュリティ警告が出る事象について、アドバイスをお願いします。 やりたいことは、以下4点です。 (1)CSVファイル「C:\temp\File1.csv」をテーブル「T_File」としてインポートする。 (2)クエリ「データ確認」を表示する (3)表示したクエリ「データ確認」をエクスポートする。 (4)エクスポートしたメッセージを表示する ※週ごとに実行したいので、最初にテーブル「T_File」を削除します。 フォームに設置したコマンドボタンを押すことで実行させたいと思っています。 理由は、インポートするCSVファイルがデータ項目の並びなど複数のパターンがあるためで、インポート定義を複数作成して、コマンドボタンを複数設置するつもりです。 以下が、1つのコードです。 -------ここから-------- Private Sub コマンド0_Click() On Error GoTo Err_コマンド0_Click DoCmd.OpenQuery "Q_Del", acViewNormal, acEdit DoCmd.TransferText acImportDelim, "File1定義", "T_File", "C:\temp\File1.csv", False, "" DoCmd.OpenQuery "データ確認", acViewNormal, acEdit DoCmd.OutputTo acQuery, "データ確認", "MicrosoftExcelBiff8(*.xls)", "C:\temp\データ確認.xls", False, "", 0 MsgBox "データを 『 C:\temp 』 に出力しました。", vbInformation, "データ出力終了" Exit_コマンド0_Click: Exit Sub Err_コマンド0_Click: MsgBox Err.Description Resume Exit_コマンド0_Click End Sub -------ここまで-------- なんとか思ったように動いているのですが、超初心者が見よう見まねで作成したためか、ACCESSを起動しようとしたり、最適化すると下記のようなメッセージが表示されます。 -------ここから-------- セキュリティ警告 このファイルに、意図的にお使いのコンピュータに損害を与えるコードが含まれる場合、ファイルは安全でない可能性があります。 -------ここまで-------- ここで、質問です。 私が書いたコードは、いろいろ調べてコピーして張り付けたものなので、何か書き方が違っていたり、足りないコードがあるのでしょうか? もしくは、下記URLにあるようにセキュリティレベルを変更するかデジタル署名を使用することで回避できるのでしょうか? http://support.microsoft.com/kb/884310/ja このACCESSを他の事務所の方に展開して利用してもらおうと考えているため、セキュリティ警告が出ないようにしたいと思っています。 (みんなに嫌がられるので・・・) 超初心者のため、どのように伺えばいいのか難しく、表現がおかしかったり言葉足らずのことがあればご指摘ください。 良いアドバイスをお願いいたします!

  • Access インポート時のエラー処理

    お世話になります。 Access2010 csvファイルをインポートするツールを作成しました。 フォーム上に設置した「インポート」ボタンを押すと、所定のcsvファイル をインポートします。 ※事前にtempテーブルを作成しておき、そこにインポートします。 DoCmd.TransferText acImportDelim, , temp, 所定のパス, True <質問> インポート時に、稀にデータ変換エラーとなります。 データ変換エラーに限らず、エラーが発生した場合はエラーメッセージを 表示し、処理を中断したいのですが、どのようにすればよいのでしょうか。 ※データ変換エラーの場合、特にエラーメッセージも表示されず、普通に  処理が進んでしまうので、エラーが出ていたことすら気づきません。 インポート後、作成されたエラーテーブルの有無チェックすればいいかと 思ったのですが、それだとどのような内容のエラーなのか、そのエラー テーブルを開いてみないと分かりません。 ※当該ツールの使用者はAccess Runtimeを使っているので、エラーテーブル  の中身を確認することは出来ません。 エラーコードを拾ってそれに該当するエラーメッセージを表示させることに なるかと思うのですが、その拾い方やエラーコードが分からずにいます。 ご教示の程、宜しくお願い致します。

  • 重複データのエラー処理

    アクセス2002 XPの使用環境です。 CSVファイルよりアクセスのテーブルにインポートする時に キーを設定して重複データのインポートを避けていますが アクセスのエラーを非表示にしてエラーメッセージを出したいのですが うまく動作しません ご指南ください。 Private Sub データ取込_Click() On Error GoTo myErr DoCmd.SetWarnings False DoCmd.TransferText acImportDelim, , "データ取込", "c:\データ.csv", False MsgBox "データを取り込みました" DoCmd.SetWarnings True Exit Sub myErr: MsgBox "重複していますのでデータを確認してください" End Sub 正常の場合 データを取り込みました 重複の場合 重複していますのでデータを確認してください というメッセージを出したいのです。

  • ExcelVBAでモジュールを送る

    ちょっとわかりにくいかもしれませんが、モジュールのコピーをマクロでできないものでしょうか? ExcelVBAで二つのファイルを使っています。Aという何のデータも入っていないファイルなのですが、実はそれにモジュールが書いてあり、それ専用に使っています。 CSVデータを変換したり、図形を描いたり、グラフを作るプログラムが書いてあります。 そのAファイルを使ってCSVデータ「Bファイル」を起動します。BファイルはダウンロードしてきたCSVファイルです。 Aファイルは常に個人個人がもっているのですが、CSVはネット上からダウンロードしています。 当然Aファイルが常に起動していないと、Bファイルだけでは「CSV変換」や「図形描写」ができないのわけです。「CSV変換」は最初の1回で終わる話ですが、「図形描写」「グラフ作成」はその後何度もすることがあります。 単にBファイルからマクロのインポートなどをすれば済むのかもしれませんが、数多くの使用者の中には「マクロのイン・エクスポートができない」とか「めんどくさい」という方がいます。外部にデータを引き渡す際に、AとBの両方送らねばならなくなってしまいます。 で・・・お伺いしたいのはマクロで「Aファイルのモジュール」を「Bファイルの中にコピー」できないか?ということなんです。 Aファイルでボタン一つを押せば、すべて整う環境にしたいのです。 逆に「AファイルにBのCSVデータをコピーして、そこで使うようにすれば?」と聞いたのですけど、それはどうしても出来なかったときの最低ラインとし、出来れば「Aのモジュール→BのCSV」に行きたいのだそうです。 マクロでモジュールのコピーというのは・・・出来るものなのでしょうか?よろしければ教えてください。

専門家に質問してみよう