• ベストアンサー

入力の簡略化

kurodai2の回答

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.2

kurodai2です。 前回のは、難しかったですか・・ >非連結のテキストボックス「非ツアーNo.」にツアーNo.を入れ、 >保存ボタン押したら「非ツアーNo.」から「ツアーNo.」へ値を >反映させるようにしたのですが、ボタンを押した時点では反映 >されているのに、レコードが切り替わったらブランクに >なってしまいます。たぶんそういう設定にしているのでしょうけど、 >どこをいじっていいのか。。 この切り替わったら・・と言うのは 新しいデータの入力になったら と言うことですか? そうであれば、当然そうなります。 なぜならば、保存のときにツアーNOを入れていますので 新しいデータになった時には、空の状態ですね。 新しいデータの入力状態になったときに、ツアーNOが入っている ようにするには、保存ボタンを押したときではなく(このイベント時に ほかにどのような操作をしているのかも不明ですね) Private Sub Form_BeforeInsert(Cancel As Integer) のタイミングですね。 >しかもツアーNo.へ値を反映させても値のみが反映され、 >「ツアータイトル」と「ツアー情報」が空白のままになって >しまいます。 そもそも、ツアーNOを入力すると言うことから考えると 「ツアータイトル」「ツアー情報」の情報がマスタ化されてるのでしょう。 そうなると、画面上の「ツアータイトル」と「ツアー情報」は表示 されているだけで、入力項目でも、データとして格納される項目でもないと 思うのですが・・ ツアーNOの入力間違いがあると言うことであれば、コンボボックスではない と考えます。 そうなると、ツアーNOを入力したときに、ツアーマスターを 参照して、「ツアータイトル」「ツアー情報」を取得している場所が あるのではないですか? 新規データ入力になった時にツアーNOをセットするようにすれば その処理を通るのか?  通らないのであれば、セットした時にその処理をしてやるようにすれば よいと思いますが ただ・・コードだけ入力して、名称を参照表示させているとしても 間違っていれば、表示されないか 他の名称が表示されるので 基本的には入力時に即 気がつくと思うのですが・・ 入力対象のテーブルの構成と、画面の部品の種類 (テキストボックスなのかコンボなのか)を含め、 もう少し情報を出されたほうがわかりやすいですね。

Armadillo5
質問者

補足

先日は本当にありがとうございました! しつこく質問しまくって申し訳ありません。 とりあえず今現在はコンボボックスでなく、 テキストボックスになります。返答が遅れてしまいました。 前もってツアーNo.とツアータイトルとツアー情報を、 ツアー内容テーブルに入力しておきます。 フォームのテキストボックスにツアーNo.を入れたら、タイトルと 情報がでるようにしています。そのフォームで入力した全てのものが 入るテーブルに、その三つも入るようなっています >新しいデータの入力状態になったときに、ツアーNOが入っている ようにするには、保存ボタンを押したときではなく(このイベント時に ほかにどのような操作をしているのかも不明ですね) Private Sub Form_BeforeInsert(Cancel As Integer) のタイミングですね。 クリック時に Private Sub 新規データ保存_Click() Me.入力者書込み.Value = Me.入力者表示.Value Dim strmsg As String strmsg = "データの保存が完了しました。" CkPoint = False 'CKPointをFalseに変更します。 MsgBox strmsg, vbInformation DoCmd.GoToRecord , , acNewRec DoCmd.GoToControl "自宅電話番号" End Sub となっています。 タイミングが違うのですね^^;了解しました。 画面の部品ですが、ツアーNo.、タイトル、情報の上記の三つと ツアーID、これは規定値にして新しいレコードになった際も 最後に入力したデータが反映されます。 あとは普通に個人情報です。氏名、電話番号、住所(郵便番号支援使用)です。 今現在のツアーNo.に入っているコードは以下です。 Private Sub ツアーNo_AfterUpdate() If Me![招待者ID] = 0 Then Me![招待者ID] = Nz(DMax("招待者ID", "旅行招待者管理テーブル")) + 1 End If DoCmd.SetWarnings False '警告メッセージをオフにします。 DoCmd.OpenQuery "ツアー情報抽出テーブル削除クエリ" ' 削除クエリーを実行します。 ' 追加クエリーを実行します。 DoCmd.OpenQuery "ツアー情報抽出テーブル作成クエリ" DoCmd.SetWarnings True '警告メッセージをオンに戻します。 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim stCri As String Set cn = CurrentProject.Connection rs.Open "ツアー情報抽出テーブル", cn, adOpenDynamic, adLockOptimistic '文字列型データ検索 stCri = "[ツアーNo]='" & ツアーNo & "'" rs.Find stCri '該当するレコードが無い場合は、メッセージボックスを表示し、抜け出す If rs.EOF Then MsgBox ("該当データがありません。確認してください!!") Else Me!ツアー情報 = rs!ツアー情報 Me!ツアータイトル = rs!ツアータイトル End If rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub

関連するQ&A

  • ACCESSのフォーム

    はじめまして。 個人データの管理でACCESSで名簿入力をしています。 入力のフォームを開く際に、 Private Sub Form_Open(Cancel As Integer) Dim Textname As TextBox Dim strmsg As String Dim varname As Variant Set Textname = Me.入力者表示 strmsg = "入力者氏名を入力して下さい" varname = InputBox(strmsg) '入力なき時は、フォームオープンをキャンセルします。 If varname = "" Then Cancel = True End If Textname = varname End Sub として、入力者の氏名を入力しています。 詳細は作成者でないので分かりかねますが、 フォームで非連結のテキストボックスを作成して、 なにかしら表示ができるようになっているみたいです。 これはフォームを開く際に出てきた小さい窓に一度だけ入力者氏名を 入力したら、そのままフォームを閉じるまでその氏名が反映されます。 現在、入力するものにコードというものがあるのですが、これも同じようにできないかと思っています。一日のデータ入力作業では 基本同じコードを使用し、一回一回コードを入力していました。 やはり人間の手によるものですから間違いがあり、 違うコードを入力してしまうと行方不明になってしまうのです。 コードも上記の入力者氏名と同じように、 フォームを開く際に出てくる小窓での入力は可能でしょうか? ちなみに現在商品コードを入力したら、コードの種別タイトルという ものが自動で出力される仕組みになっています。 それも反映されないといけないのです。 なにかお知恵を拝借させていただければと思います。 足りない情報があればご指摘ください。 宜しくお願いいたします。

  • Excel VBA インプットボックス空文字を入力

    いつもお世話になっています。 下記のような入力処理をインプットボックスで行いたいと考えています。 勤務先は場合によっては不要なのでパスして次に移りたいのですが 空文字だとOKをクリックしても、キャンセルをクリックしても処理が終わってしまいます。 勤務先 = InputBox("勤務先を入力") If 勤務先 = "" Then Exit Sub ActiveCell.Value = 勤務先 ActiveCell.Offset(0, 1).Select 氏名 = InputBox("氏名を入力") If 氏名 = "" Then Exit Sub ActiveCell.Value = 氏名 空文字のままOKもしくはキャンセルでも次の処理に移るにはどうしたらよいでしょうか。 お力添えをお願いいたします。

  • OKを押してもキャンセルを押しても、反応しない

    このコード、どこが間違ってるか教えてもらえますか? Sub test() Dim ret As Variant ret = InputBox("タイトルを入力してください。") If TypeName(ret) = "Boolean" Then MsgBox "キャンセルが選択されました" End If End Sub これで、キャンセルボタンを押しても、メッセージボックスが表示されません。 間違えてる部分がわかりません。

  • inputbox のキャンセルの戻り値について(VBA×エクセル)

    VBA初心者で、ユーザフォームにはまだ手出ししたくなく、INPUTBOXで値を取得しているのですが、 INPUTBOXでキャンセルボタンを押したときに、マクロを終了するように書きたいのですが、どのように記述したらよいのでしょうか? INPUTBOXからはどんな値が返ってきているかわからず、 メッセージボックスで確認してみたのですが、空欄なので、 IF RetIPT ="" then マクロ終了 endif としてみたのですが、「マクロ終了」には進んでくれず... 回答をお願いします~

  • InputBox キャンセルボタンが押された時の処理

    こんばんは。 Sub test() Dim タイトル As String タイトル = InputBox("タイトルを入力してください。") If Cancel = True Then Exit Sub ’次のコード・・・ ’次のコード・・・ End Sub このコードを実行した時に 下記のダイアログが出てきて 右のキャンセルボタンを押すと、 「If Cancel = True Then Exit Sub」 でsubステートメントを抜けたいのですが 「Cancel」の部分が 「変数が定義されていません」とエラーになってしまいます。 Dim Cancel As Boolean を追加してキャンセルボタンを押しても TrueではなくFalseになってしまいます。 回避方法を教えてください。 よろしくお願いします。

  • エクセルマクロでinputboxメソッドゼロ入力

    エクセル2007です。 以下のマクロで、inputboxメソッドで質問させると、キャンセルボタンを押すと、うまいぐあいに止まります。 しかし、0を押しても、止まってしまいます。本当は、C2にゼロと表示させたいのです。 Sub 練習() Dim myR myR = Application.InputBox(prompt:="数量を入力しなさい", Type:=1) If myR = False Then Exit Sub Range("C2").Value = myR End Sub

  • inputboxの日本語入力切替について

    VBAのinputbox関数についての質問です inputboxを使ってデータの入力をしたいのですが、日本語入力のONとOFFを自動的に切り替えられる記述はありませんでしょうか。 現在の記述は sub 入力() Dim simei As String simei = InputBox("氏名を入力してください") range("b5").Value = Simei End su のような感じです。inputboxを表示するまえに、言語バーの日本語入力がONの状態になるようにしたいのですが…。よろしくお願いします。

  • マクロ inputbox ブランクで入力した時

    いつも回答して頂きありがとうございます。 InputBoxに何も入力せず、OKを押してしまった場合、マクロの処理を終了させたいのですが、どうしたらよろしいでしょうか?宜しくお願い致します。 Sub 名前を入力する() Dim a As Long a = Application.InputBox("班を数字で入力して下さい。", Type:=1) If a = 0 Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If With ActiveSheet .Range("E4:F5").Value = Worksheets("名前一覧").Cells(2, a).Value End With End Sub

  • エクセルVBA、入力しないと閉じないInputBox

    必ず何かを入力しないと閉じないInputBoxを作ろうと思います。 以下のコードで入力がなければ閉じないというか、Line:に戻るので、何度でも現れるInputBoxになるようですが、このやり方は正しいですか? 通常はどうやるのでしょうか? Sub test() Dim a line: a = Application.InputBox("必ず入力して下さい。", "Input!") If Len(a) = 0 Or a = False Then GoTo line MsgBox "有難う。" & a & " ですね。", , "(o。_。)oペコッ" End Sub

  • xlAPPがないと、キャンセルしても無視される

    Sub xlAPPがある場合() Dim xlAPP As Application Dim strPathName As String, vntPathName As Variant Dim strFileName As String Set xlAPP = Application 'ここでわざとESCキーかキャンセルを押す vntPathName = xlAPP.InputBox("参照するフォルダ名を入力して下さい。", , "C:\") If VarType(vntPathName) = vbBoolean Then MsgBox "キャンセルがクリックされました" Exit Sub End If End Sub Sub xlAPPがない場合() Dim strPathName As String, vntPathName As Variant Dim strFileName As String 'ここでわざとESCキーかキャンセルを押す vntPathName = InputBox("参照するフォルダ名を入力して下さい。", , "C:\")      ’無視される If VarType(vntPathName) = vbBoolean Then MsgBox "キャンセルがクリックされました" Exit Sub End If End Sub ************************************************** InputBoxを開いた時にキャンセルするふたつのプロシージャーを比較した時に、 xlAPPがないコードは、キャンセルしても無視されます。 xlAPPがどんな役割をしているのか、 xlAPPがないと、なぜ無視されるのかがわかりません。 あと、二つを比較すると、表示されるInputBoxの形式も違います。 ご教授よろしくお願いします。