痔になりやすい生活習慣とは?

こんにちは。
エクセルで作成された従業員台帳を、アクセスにインポートしたいのですが、エラーが出て困っています。

インポートの為のフォームを作り、参照ボタンでそのエクセルファイルを選択してフルパスを取得し(こちらの動作はOKです)、実行ボタンでそのファイルをインポートする、という方法をとろうと思います。

transferspreadsheet で、エクセルのファイル(.xls)は問題なくいくのですが、csv形式のファイルを指定して同じようにインポートすると、
実行時エラー 3274 外部テーブルのフォーマットが正しくありません。 となってしまいます。

書いているコードは、
DoCmd.TransferSpreadsheet acImport, 8, "従業員台帳(アクセス側でのテーブルの名前)", "上記画面で取得したフルパス", True(一番上の項目をフィールド名として使用します), ""

です。.xlsでも.csvの形式でもインポートできるようにしたいのです。

環境は、winXPpro、Access2000、Excel2000 です。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

TransferSpreadsheet ではなく


TransferText を使用してみてください。

詳細はヘルプをご覧下さい。
    • good
    • 0
この回答へのお礼

こんにちは。早速の回答ありがとうございます。ヘルプを見て、TransferTextを使用してみたらできました!
インポート元のファイルが.xlsのときはTransferSpreadsheet、.csvのときはTransferTextを使うようにしようと思います。どうもありがとうございました。
お礼に書いてしまって申し訳ないのですが、インポートしたテーブルを、削除するということはできないのでしょうか?何回も取り込む場合、テーブルが残っているとちょっと面倒なので…(今はそれにより発生するエラーの番号を拾って回避しています)。もしお分かりになりましたらよろしくお願いします。

お礼日時:2003/07/23 14:48

#1 です。



>インポートしたテーブルを、削除するということはできないのでしょうか

テーブルの削除なら

DoCmd.DeleteObject acTable, "テーブル名"

ですね。
毎回、同じデータ形式のCSVをインポートするなら、インポート先のワークテーブルを固定にしておいて、インポートの直前に、

DoCmd.SetWarnings False
DoCmd.RunSQL "Delete From ワークテーブル名"

で、データだけ消してしまう方法があります。
    • good
    • 0
この回答へのお礼

こんにちは。再度の回答、どうもありがとうございます。
データが重複すると困るので、インポートしたテーブルを参照して、データが残っていたらdelete文で削除し、インポートの処理を行っているのですが、テーブルがない場合、参照することすらできないので(この部分をエラー番号で拾っています)、そうだ、テーブルを削除すればいい、と思ったのです。取り込むファイルは同じ形式の予定ですが、お客さんの使うソフトに組み込む予定ですので、できるだけエラーの出ないようにしたいものですから…
本当に助かりました。ありがとうございます。また何かありましたらよろしくお願いします。

お礼日時:2003/07/23 15:25

TransferSpreadsheetではなくTransferTextを使います。



DoCmd.TransferText acImportDelim,"定義名","アクセスのテーブル名","ファイル名",True(最初の行をフィールド名として使用)

となります。

ひとつのコマンドでエクセルもテキストデータも、と
いう方法はないのでは?
    • good
    • 0
この回答へのお礼

こんにちは。インポート元のファイルがcsv形式のときは、TransferTextを使用するようにしたらできました!回答どうもありがとうございました。

お礼日時:2003/07/23 14:50

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessのテーブルを既存のExcelファイルへエクスポートしたいんですが

Win2000,Access2000,Excel2000を使用しています。
アクセスのテーブルを既存のエクセルファイルへエクスポートするマクロを組みましたが実行すると、
 「外部テーブルのフォーマットが正しくありません。」
というメッセージが出ます。
ヘルプを見ると、
 「テーブルの形式がリンク後に変更されています。
  テーブルをリンクし直してから、もう一度実行してください。」
という表示が出ますが、なんのことやらちんぷんかんぷんです。
そもそもテーブルのリンクとはどういう意味でしょうか?
別のエクセルファイルへエクスポートしてみましたが、それは問題なくできたので、エクスポートさせようとしているエクセルファイルの方に問題があるのでしょうか?
どなたかお教えください。

Aベストアンサー

Microsoft Excel 8-9だったら、ファイルごと書き換えてしまうはずだなぁ。
おかしいなぁ。
ファイルに書き込み保護がかかっているとか、ファイルが壊れているとか、そういう原因も考えられますが、通常は、エクスポートのときにその旨のメッセージが出ます。
リンクがかかってそこでエラーが起きているのだから、Accessのモジュールが壊れているのかもしれません。
申し訳ありませんが、私にはわかりません。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qアクセス2000→エクセル2010へエクスポート

Private Sub cmd出力ボタン_Click()
DoCmd.SetWarnings False
DoCmd.TransferSpreadsheet acExport, 8, "出力クエリ", "C:データ.xlsx", True, ""
DoCmd.SetWarnings True

End Sub

実行すると

外部テーブルのフォーマットが正しくありません

と出てしまいます。
エクセル97の形式にエクスポートする際は大丈夫でした。
spreadsheettypeの引数が違うのかとは思いますが適切な数値がわかりません。
他のやり方等もあれば教えて下さい。

Aベストアンサー

 DoCmd.TransferSpreadsheet acExport, 8, "出力クエリ", "C:データ.xls", True, ""

これ試されましたか? .xlsはEXCEL2000の拡張子 です。
ACCESS2000からEXCEL2000へのエクスポートですから出来るはずです。

またエクセル2010は下位のヴァージョンのエクセルファイルは読めるので
一旦読んで名前を付けて保存にするとどちらのヴァージョンでも書き込みは出来ます

QAccessからExcelファイルのデータ取得

Access2000かExcelファイルのデータを取得したいのですが、
Excelファイルを一度 CSVファイルに変換し、その後Accessのテーブルへデータ取り込み といった手順をとりたいのです。
この方法って、どうコーディングすればいいのですか?
(Accessのインポート処理は使用しない方法です)

Aベストアンサー

VBAの基本的なことはご存知ですか?
でしたら、
1.Accessで対象のExcelファイルを選択
2.AccessからExcelを制御してCSVにコンバート
3.出来たCSVファイルをAccessに取り込む(テキスト取り込み インポート定義を使うと簡単)
この順序で行えばOKです。
ExcelでVBAを書くことで制御する方法もありますが、
Access側からExcelを制御する方がやりやすいと思います。

QAccess-VBAでExcelファイルを作成する。

こんにちわお世話になります。

「Excelにエクスポート」ボタンをクリックすると、Inputboxか何かが表示されて、Pathやファイル名やシート名を入力し、「実行」ボタンを押すと、新規にExcelのBookを、そのPath、ファイル名、シート名で作成する。その後、そのシートにデータを書き込むという作業をしたいのです。
AccessのデータをExcelの任意のシートを開いて書き込むという部分のVBAコードはわかりますので、新規Book作成部分のコードがわかるかたお願いします。
Office97を使用しています。

Aベストアンサー

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
  Dim xlSheet As Excel.Worksheet

  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Add
  Set xlSheet = xlBook.Worksheets(1)

  ' Excel のセルに値を代入します。
  xlSheet.Cells(1, 1).Value = " "

  ' Worksheet を名前をつけて保存します。ダイアグボックス等を使用して
   パスやBook名など入力できるようにしてもOKです。
  xlSheet.SaveAs "c:\Temp.xls"

  xlApp.Quit

  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing
End Sub

こんな感じでしょうか。

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
...続きを読む

QAccessでボタンを押したらエクセルデータを読み込み処理をしたい

よろしくお願いします。
AccessからExcelを開けるようにしたいのですが、
コードの記述方法がいまいちわかりません。
教えて頂けますでしょうか。

最終的には、ボタンをクリックしたら、ExcelファイルにあるデータをAccessに取り込み、それでDM用のラベルを作りたいと考えています。
勉強が必要なので、少しずつやろうと考え、
開く為のコードからいろいろいじってみようと考えました。
もし、他に効率の良い学習方法があればそちらもお願い致します。

Aベストアンサー

お世話になります。

>コードの記述方法がいまいちわかりません。
と言う事でしたので,最も簡単な方法を。

(1)Accessのマクロを作ります.
 [アクション]で[ワークシート変換]を選択し,
 画面の下部にある,[アクションの引数]に
 適宜入力します。
 
 作成したマクロを適当な名前をつけて保存します。

(2)Accessメニューバーの
 [ツール]→[マクロ]→[マクロを VisualBasicに変換]を選択し,変換します。

変換されたモジュールを見てみれば,
どんな感じでAccessテーブルにインポートするか
解ると思います。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

Qインポート時のエラー「データ型の変換エラー」

ACCESS2000を使用しています。
CSVファイルをマクロを使い、インポートしようとしているのですが、ある列に「33300G2」というデータがあります。
インポートのマクロを実行するとそのデータのみがインポートエラー(エラー内容は「データ型の変換エラー」)となってしまいます。
ちなみに、エラーが出る列は、「33300G2」以外全てが数字のみなのですが関係あるのでしょうか。
もし原因らしきものがわかればアドバイスよろしくお願いいたします。

Aベストアンサー

インポート定義をして下さい。
インポート→設定→データ型を変更して下さい。
何かあれば補足して下さい。
がんばれ

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング