• ベストアンサー

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

モジュールからフォーム上のテキストボックスに入力された値を参照する方法で質問です。 内容としては、テキストボックスに入力された日付(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 以上の様なモジュールを組んでみましたがインポート出来ませんでした。 エラーは出ませんでしたが何も起こらないといった状態です。 モジュールの部分についてはなんとなくわかるのですが、フォーム側の設定?がよくわかりません。 あと何をどのようにすればテキストボックス内の値を参照可能になりますでしょうか? 何卒よろしくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 標準モジュールということは、他でも使うという意味だと思いますので、引数を与えました。 それと、"Import" というユーザー定義関数名は、ぶつからないれども、ちょっとうまくないと思いますので、ImportCSV にしました。後は、Form1 側のどこかのイベントに加えて、  Call ImportCSV(Me ) を加えればよいと思います。 Public Function ImportCSV(obj As Form)   On Error GoTo ImportCSV_Err   Dim FilePath As String   Dim vntDate As Variant      vntDate = obj.Tbox1.Value   If IsDate(vntDate) Then     vntDate = CDate(vntDate)   Else     MsgBox "日付値を正しく入力してください。例:yy/mm/dd", vbInformation     Exit Function   End If   '差し引き 9年の幅を与えて、ミスを減らすことにしました。   If Abs(Year(vntDate) - Year(Date)) > 10 Then     If MsgBox(obj.Tbox1.Value & "入力は正しいですか?", vbInformation + vbYesNo) = vbNo Then     Exit Function     End If   End If      FilePath = "C:\" & Format(vntDate, "yyyymmdd") & ".csv"  If Len(Dir(FilePath)) = 0 Then     MsgBox "ファイルがありません。"   Else     DoCmd.TransferText acImportDelim, "インポート定義", "インポートテーブル", FilePath   End If ImportCSV_Exit:   Exit Function ImportCSV_Err:   MsgBox Err.Description   Resume ImportCSV_Exit End Function

xtoufux
質問者

お礼

返信ありがとうございます。 ご教授いただいたコードで動かしてみましたがエラーが出てしまったので、チェック部分は外して動作したのでそちらで対応いたしました。 更新版としてエラーチェックを入れたいと思います。

その他の回答 (1)

  • venzou
  • ベストアンサー率71% (311/435)
回答No.1

AccessVBAかな。 >エラーは出ませんでしたが何も起こらないといった状態です。 On Error GoTo Import_Err ここでエラーを無視していますので、この行をコメントアウトして下さい。 エラーが出ると思いますよ。 ------------------------------------------------ 通常はフォームにコードを書きますが、モジュールに書いているのは何か理由があるのでしょうか? モジュールに書く場合は、フォームが開いているかチェックする必要があります。 ------------------------------------------------ >FilePath = "C:\" & Format(Form1.TBox1.Value, "yyyymmdd") & ".csv" FilePath = "C:\" & Format(Forms.Form1.TBox1.Value, "yyyymmdd") & ".csv" Formsが必要だと思います。 また、内容をチェックした方が良いと思います。 ------------------------------------------------ 下記のような感じでいかがでしょうか? Function Import() On Error GoTo Import_Err Dim FilePath As String If SysCmd(acSysCmdGetObjectState, acForm, "Form1") <> 0 Then   If IsDate(Forms.Form1.TBox1.Value) Then     FilePath = "C:\" & Format(Forms.Form1.TBox1.Value, "yyyymmdd") & ".csv"   ElseIf IsDate(Forms.Form1.TBox1.Text) Then     FilePath = "C:\" & Format(Forms.Form1.TBox1.Text, "yyyymmdd") & ".csv"   Else     MsgBox "TBox1の内容が日付ではありません。"   End If      If FilePath <> "" Then     DoCmd.TransferText acImportDelim, "インポート定義", "インポートテーブル", FilePath   End If Else   MsgBox "Form1が開いていません" End If Import_Exit: Exit Function Import_Err: Resume Import_Exit End Function

xtoufux
質問者

お礼

返信ありがとうございます! なんとか動く様になりました。 クラスモジュールの記述方法はあったのですが標準に書くときの記述を間違っていました。 大変ありがとうございました。

関連するQ&A

  • C#でテキストボックスをクリック→フォームが開く→フォームで設定した値

    C#でテキストボックスをクリック→フォームが開く→フォームで設定した値を元のテキストボックスに入力 こんな感じのことをC#でやりたいのですがよくわからないので教えてください。 1. 親をForm1、子をForm2とします 2. Form1のTextBox1をクリックするとForm2が開いきます 3. Form2で設定した値をForm2の「入力」ボタンを押すとForm2が閉じてTextBox1に値が入力されます というものです。 ここで、textBoxは「クリックしたコントロール名を取得してForm2に渡したい」のです。 テキストボックスがたくさんあるので、textBox1とか決まった名前ではありません。 この部分がわからないのです。 ------------------------------------------------------- Form1: private void textBox1_Click(object sender, EventArgs e) {  Form2 fromItem = new Form2(sender);  DialogResult deRet = fromItem.ShowDialog(); } Form2: public Form2(object sender) {  InitializeComponent();  object pSender = sender; } private void button_input_Click(object sender, EventArgs e) {  ((System.Windows.Forms.TextBox)pSender).text = "hoge"; } ------------------------------------------------------- この程度しかわかりません。 正しい方法を教えてください。よろしくお願いいたします。

  • 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 もし不足な点がありましたら補足させていただきます。 よろしくお願いします。

  • テキストボックスクリックでフォームたちあげ

    VB6.0でプログラム作成中です。 あるhinというオブジェクト名のテキストボックスをデータを入力しようとすると、Form2を立ち上がるようにしたいのです。以下のコードでいけると思ったのですが、フォームがあがらない状態です。 指摘頂ける方、宜しくお願い致します。 内容:フォーム2 キーボードの役割 テキストボックスに触れると、キーボードが立ち上がる。 Private Sub hin_Change(Index As Integer) Form2.Show End Sub

  • フォームのテキストボックスなどの変数名を標準モジュールから参照は可能か?

    フォームのテキストボックスなどの変数を標準モジュールの関数から参照する方法を教えてください。 お願いします。

  • テキストボックスによりリストボックスの内容を変える

    Accessのフォームで顧客管理画面を作成しています。 ボタン【日本】【アメリカ】【イギリス】を作成し、 それぞれのボタンをクリックすると、テキストボックス1が 【日本】【アメリカ】【イギリス】 と内容が変化するように作成しました。 また別に「新規登録」ボタンと「国名」コンボボックス1を配置しました。 テキストボックス1が”日本”の時に「新規登録」ボタンをクリックすると コンボボックス1が”日本"と、 テキストボックス1が”アメリカ”の時に「新規登録」ボタンをクリックすると コンボボックス1が”アメリカ"と表示されるようにしたいです。 どのようにコードを書けばいいでしょうか? ちなみに新規登録のコードは以下です。 On Error GoTo Err_c新規登録_Click DoCmd.GoToRecord , , acNewRec Exit_c新規登録_Click: Exit Sub Err_c新規登録_Click: MsgBox Err.Description Resume Exit_c新規登録_Click ご教授お願いいたします!

  • フォームのテキストボックスが空白なら"*"を入力する

    「フォームのテキストボックスが空白なら"*"を入力する」 としたいのですが If Form.承認者テキスト.Value = "" Then Form.承認者テキト.Value = "*" だと承認者テキストでも"*"が入力されません。 Form.承認者テキスト.Value = Null としてもできません。どうすればいいのでしょうか? よろしくお願いします。

  • テキストボックスを無効にすると値が取得できない

    javascriptでこのようにテキストボックスを無効に してフォームを送信するとphp側でvalueの値が取得できないのですが、入力無効にすると valueは送られないんでしょうか? <form> <input type="text" id="sample" name="sample" value="値" /> </form> スクリプト .document.getElementById('sample').disabled = true; valueにはphpで値をセットし、それをテキストボックスで編集できないようにして 値を飛ばそうとしたのですがテキストボックスのvalueの値が来てないようです。 自分なりに考えたんですが、送信する瞬間だけ(submitボタンが押された時) テキストボックスを有効に戻すようにコードを書いているのですが これ以外で何かありますか? ---このように対処--- <form onsubmit="return disb()"> <input type="text" name="sample" value="値" /> </form> スクリプト document.getElementById('sample').disabled = true; function disb(f){ f.sample.disabled = false; }

  • エクセル、フォームのテキストボックスから検索

    あるフォルダに、CSVファイルが沢山あります。例 23148662.CSV そこで、フォームに配置したテキストボックスに、「23148662」と入力し 登録ボタンを押せば、該当のCSVファイルがシートに取り込まれるようにするには どうすればよいでしょうか? 有識者のみなさん、どうぞよろしくお願いいたします。

  • 「Form_フォーム1.テキスト1.Value = "" 」がうまくいかない。

    VBAについての質問です。(オフィス2003) フォーム1にテキストボックス1を作成しました。 Module1に Sub test() If Form_フォーム1.テキスト1.Value = "" Then MsgBox "空白です" End If End Sub とコードを書き、テキストボックス1を空白の状態でtestを実行しても何も起こりません。 F8で一行づつ実行してみてみたら Form_フォーム1.テキスト1.Valueのところにカーソルを当てると Form_フォーム1.テキスト1.Value=Nullとなります。 どうすればテキストボックス1が空白なら「空白です」と表示させることが可能でしょうか? よろしくお願いします。

  • 任意のフォーム名・部品名に対応したいのですが・・・

    始めまして。 カラーパレットのphpを作り、親ウィンドウのテキストボックスにカラー値を 引き渡す部分に以下のようなjavascriptを作りました。 function set_color(color) { window.opener.document.form1.name_color.value = color; } (フォーム名:form1 テキストボックス名:name_color) 一応これでも動作するのですが、これではテキストボックスごとに別々のphpプログラムを用意しなければなりません。 そこで、引数を使い function set_color(form_name, txt_name, color) という形でフォーム名とテキストボックス名を任意に指定したいのですが window.opener.document.form1.name_color.value = color; の部分をどう書きかえればいいのかわかりません。 どうか、よろしくお願いします。

専門家に質問してみよう