• 締切済み

Accessのフォームで入力したファイル名を使ってインポートする方法

Access2000を使ってデータを変換するツールを作ろうとしています。元データをTransferTextを使って取込むことにしたのですが、複数のファイルを取込む為、TransferTextのパラメータであるディレクトリパスとファイル名を、フォーム等で入力して処理したいと考えています。 フォームは次のようなイメージです。 ---------------------------------------------- ■TransferTextを使ってデータを取込むイベント?を呼び出すボタン ■ディレクトリパス、ファイル名の入力ボックス ■入力ボックスに値を入力 ■ボタンをクリックすると、入力値を参照して目的のファイルを定義済のイベントプロシージャ?で取込む ---------------------------------------------- ポップアップで入力する方式はちゃんと動いたのですが、フォーム上で入力した値(ディレクトリパス、ファイル名)を、プロシージャで使うようにしたいのです。 (ファイル名はいくつもありますが、ディレクトパスは共通なので、毎回入れるのが手間なので・・) アドバイスいただきたく。

みんなの回答

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

#1です。 > TransferTextのパラメータとして使う部分で「コンパイルエラー 質問が変わっているように思いますが、元の質問であるテキストボックスの値を持ってくる処理については、これでOKなんでしょうか? 私も Access については素人ですので、ソースの提示もなく、テーブルや取り込むデータについても不明の状態で、何が悪いかと言われても解かりかねます。 こちらは Access97 ですが、mdb と同じフォルダ内にタイトル行付きのCSVファイル(test.csv)をおいて下記のようにしたら取り込めましたが。。。 Private Sub コマンド0_Click() Dim fName As String fName = CurrentDb.Name fName = Left(fName, Len(fName) - Len(Dir(fName))) テキスト1.Value = fName テキスト2.Value = "test.csv" If Not IsNull(テキスト1.Value) And _   Not IsNull(テキスト2.Value) Then   fName = テキスト1.Value & テキスト2.Value    If Dir(fName) <> "" Then     DoCmd.TransferText acImportDelim, , "T_テスト", fName, True    Else     MsgBox fName & " は無い"    End If End If End Sub

Charlie
質問者

お礼

追加の説明ありがとうございます。 ファイルを取り込む処理は、先に作ってあった為、別に記述して別なモジュールとして保存していました。そのモジュールを呼び出して処理させようとした為、うまく動かなかったようです。いただいたサンプルのように、フォームの中に記述したら、ちゃんと動きました。 ありがとうございました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

テキストボックスのテキスト1とテキスト2があるとして、 Private Sub コマンド0_Click() Dim fName As String 'テキスト1.Value = "c:\" 'テキスト2.Value = "hoge.txt" If Not IsNull(テキスト1.Value) And _   Not IsNull(テキスト2.Value) Then   fName = テキスト1.Value & テキスト2.Value   If Dir(fName) <> "" Then     MsgBox fName & " を発見"   Else     MsgBox fName & " は無い"   End If End If End Sub こんな意味ですか?

Charlie
質問者

補足

ありがとうございます。 教えていただいたやり方を参考にしてやってみましたが、上手く処理できませんでした。 メッセージボックスをポップアップさせて表示させることはできたのですが、VBの処理でTransferTextのパラメータとして使う部分で「コンパイルエラー: 修飾子が不正です」というエラーが出て止まってしまいます。 何が悪いのでしょうか・・・。

関連するQ&A

  • ACCESS2000 フォームからデータのインポートを起動するには

    お世話になります。 フォーム内にコマンドボタンを配置し、そのボタンをクリックしたら、ファイルからテーブルへデータのインポートを起動するようにしたいのですが、イベントプロシージャで、どのように記述すればよいでしょうか。 あるいは、そんなことはできないのでしょうか。

  • ACCESSでフォーム入力→レポート出力したい

    ACCESSでフォーム入力→レポート出力したい OS:XP,ACCESS2000 フォームのテキストボックスに入力した文字をレポートのテキストボックスに表示したい。 フォーム: ファイル名は「フォーム1」で、その中に作ったテキストボックス名は「入力データ」 コマンドボタン名は「レポート出力」 レポート: ファイル名は「レポート1」で、その中に作ったテキストボックス名は「出力データ」 フォーム1とレポート1を立ち上げてフォームのテキストボックスにデータを入力した後、 コマンドボタンを押してもレポート1のテキストボックスに入力したデータが表示されません。 レポート1を選択した後にデザインボタンを押し、その後にもう一度立ち上げると、 なぜかデータが書き込まれています。 コマンドボタンを押したのと同時にレポート1にデータが表示されるようにするには どうすれば良いですか? プログラムは以下の様になっております。 (1)クラスオブジェクト下 Private Sub コマンドボタン_Click() Call レポート書き出し() End Sub (2)標準モジュール下 Public Function レポート書き出し() Dim F As Form Dim R As Report Set F = Forms![フォーム1] Set R = Reports![レポート1] R![出力データ] = F![入力データ] End Function

  • Accessでパラメータークエリのパラメータを、フォームのリストボックスから選択することってできませんか?

    Accessで パラメータークエリのパラメータを、フォームのリストボックスから選択することってできませんか? あと、抽出されたテーブルの最後のリストの値を、テキストボックスに表示させるような、イベントプロシージャってどうのように書きますか? 以上、よろしくお願いします。

  • アクセスのフォーム画面で入力

    アクセス2002のフォームで文字を入力(選択)させてボタンを押すと 別の画面でその入力(選択)した文字が表示させるイベントプロシージャをつくりたいのですがPub sub~End sub内にどういう記述が必要なのでしょうか?

  • MS Accessのフォームについて

    Access2010についてお教えください。 添付の画像のように「テストメインフォーム」があります。 フォームには「テストサブフォーム」というサブフォームが配置されています。 画像はないですが、「テストレポート」というレポートもあります。 やりたい事。 テキストボックス(テスト1の値)に文字列を入力し、印刷ボタンを押す。 テキストボックスに入力された値をキーに「テストレポート」にデータが渡され、プレビュー表示。 「テスト5」のチェックボックスをONにする。 添付画像では、テキストボックスに入力された値が003のため、サブフォームの テスト1の値が003の行のテスト5のチェックボックスをONにする。 以上の事を実現できる方法をお教え頂けませんでしょうか。 DoCmd.OpenReport "テストレポート, acViewPreview, , "テスト1 = '" & txt_inputID & "'" とやったら、クエリパラメータみたいになり、テキストボックスの値を直接見るといったことが できませんでした・・・

  • ACCESSでコンボボックスからの入力でリスト外の追加をフォームを使っ

    ACCESSでコンボボックスからの入力でリスト外の追加をフォームを使って登録 ACCESSのフォームを使ってデータ入力を作成しています、"顧客名"をコンボボックスを使って選択するようにしていますが。 リスト外の新規顧客を入力する際には別の"顧客登録"フォームが開いて、顧客情報(読み仮名、顧客名、都道府県コード、所在地)を入力して、閉じると登録した"顧客名"がコンボボックスから選択できるようにしたいと思い、マクロを使用して(VBはよくわからないので) イベント→リスト外入力時→”顧客登録”フォームが開く 必要事項を入力し、閉じるボタンをクリック。 してみたのですが、コンボボックスのリストに先に入力した新規データが出てきません。 何が足りないのかご教授お願いいたします

  • フォームで入力された文字をクエリのフィールド名として反映させたい 【Microsoft Access】

    Microsoft Accessに関する質問です。バージョンは2003です。 フォーム"Fo1"に、テキストボックス"Te1"とクエリの実行を行うためのコマンドボタン"CB1"があるとします。コマンドボタン"CB1"を押すことでクエリ"Q1"が実行されるよう、イベント プロシージャに記載しています。クエリ"Q1"にはテーブル"Ta1"が表示されており、テーブル"Ta1"は複数のフィールド("Fi1","Fi2","Fi3",…)を有するものとします。 このような状況において、テキストボックス"Te1"に複数のフィールド("Fi1","Fi2","Fi3",…)のうちのどれかを記述し、コマンドボタン"CB1"を押したときに、テキストボックス"Te1"に記載されたフィールド名のデータを実行結果として出力したいと考えています。 そこで、クエリ"Q1"の「フィールド:」の部分に [Forms]![Fo1]![Te1] と記入し、「テーブル:」の部分に"Ta1"を指定した後、クエリを保存して(このときにはフィールド名の記入した部分は「式1: [Ta1].Forms![Fo1]![Te1]」と表示されています)閉じた後に、フォーム"Fo1"を開き、テキストボックス"Te1"に出力させたいフィールド名を記載しコマンドボタン"CB1"を押してみました。 すると、「パラメータの入力」というダイアログが立ち上がり、ダイアログ内には「Ta1.Forms!F01!Te1」という記述とテキストボックスが出力されました。テキストボックスに無記入で"OK"ボタンを押したところ、出力結果に「式1」という列が現れ全てのセルが空白となってしまいました。 フォームや、クエリに記入する表記が間違っているのか、そもそも出力させるフィールド名をフォームから指定するという方法が根本的に違うのかわかりません。 申し訳ありませんが、当方Accessに関しては初心者ですので、極力専門用語は少なくご教授いただければと思います。よろしくお願いします。

  • access 入力フォームへの表示

    初歩的な質問で申し訳ありません。 accessで商品マスタへの入力フォームを作成しました。 商品マスタテーブルから作成しました。 新規入力ボタン、登録ボタンを作成して、ボタンクリック時にのみ 新しいレコードへの移動、テーブルへのデータ更新を実行するようにしました。 この段階で、できれば入力フォーム上でコンボボックスなどを利用して検索を行い、 選択データをフォーム上に表示させたいと思いました。 ところがまったく知恵が働かず、どうしてよいのやら途方にくれています。 検索フォームを別途設けてもよいのですが、商品数が200たらずで、 今はコンボボックスで十分かなと思っています。 商品マスタにはカタカナ二文字の「検索キー」フィールドを設けており、 これをキーにしてクエリ(「Q商品検索」)で昇順に並べ、コンボボックスのコントロールソースを そのクエリにしました。 コンボボックスの更新後の処理イベントでマクロを使い、 「フォームを開く」にしてみましたが、その他の条件のつけ方がわかりません。 まったく的外れなことをしているのかもしれません・・・。 本やネットの質問過去ログで探してはみましたが、皆さん先を進んでおられて、窮してしまっています・・・。 このような状態でaccessを触るな!とお叱りを受けそうですが、 どうかお助け下さい。 よろしくお願いします。

  • [Access]あるフォームのクラスモジュールで値を入れた変数を他のフォームでそのまま利用したい

    モジュールとクラスモジュール(イベントプロシージャ)に違いがあることや、モジュールを超えて変数を利用したいときは、Publicで宣言する、という辺りを本を読んでおおまかに理解しました。 帳票管理フォームというフォームに受付CDという主キーの番号があります。そのフォーム上に帳票の詳細な事項を入力するフォームを呼び出すボタンがあります。フォームのイベントプロシージャの一番上のOption Compare Database,Option Explicitの直下行にPublic UketukeCD as Integerと宣言し、 ボタンのイベントプロシージャで、 UketukeCD = Me![受付CD].Value などと記述しました。 新規入力データの受付CDが例えば452ならUketukeCDには452が代入されればいいんです。 帳票の詳細な事項を入力するフォーム(報告書フォームとします)の「読みこみ時」のイベントプロシージャに以下のように記述しました。 こちらのモジュールの一番上にもPublic UketukeCD as Integerと宣言し、(←これは必要なんでしょうか?) Me![受付CD].Value = UketukeCDと書きました。 過去のデータを検索するときはレコードソースのテーブルの受付CDのデータを受付CDフィールドに持ってき、新規入力の場合は、受付CDは帳票管理フォームのものを代入するという設計で、UketukeCDの値(例:452)を報告書フォーム内の受付CDフィールド内に出力する、という感じですが、なぜかUketukeCDにはいつも0が代入されています。 変数は他のモジュールで利用できても代入された値までは移行されないのですか? イベントプロシージャだからできないんですか? 字数の制限上、コードをかなり省略しています。 足りない部分は補足で補いますのでおっしゃって下さい。

  • Access2003 フォームでの入力制限

    AccessでVBAを使用している途中わからないところが でてきましたのでお教え頂ければと思います。 WindowsXPでAccess2003を使用しております。 さっそくですが、まずデータ入力用のフォームがあります。 数量を入力するテキストボックスがあり、そこに入力された値が 0以上100未満ではない場合エラーを表示するようなVBAを使用しています。 このエラーチェックをVBAで直接値を指定するのではなく テーブルにあるマスターを参照して判断することは可能でしょうか。 少々わかりにくいですかね…; 項目 下限 上限 ------------------- 数量   0    100 金額  500  5000 上記マスタがあります。 フォームにて数量のテキストボックスに値を入力し、とあるボタンを クリックした際にこのマスタを見に行き、0未満あるいは100以上の 場合はエラーを表示させたいのです。 こういう場合はADO?という記述を使用しなければならないのでしょうか… よろしければお教えください。

専門家に質問してみよう