ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

同じ質問2度目です、回答頂いていましたが、画像ができたので貼り付けました。
新しい質問でないと貼り付けできないものですみません
最初の回答も参考にさせていただきます。
----------------------------------
添付画像参照願います。
アクセスのフォームで入力する際、社員番号のテキストボックスから資格コードまでジャンプ
させたいと思います、
やったのはプロパティで更新後処理の埋め込みマクロでアクションをコントロールの移動を使い
引数に資格コードを使いました。
すると画像のようなエラーが出てしまいます。
以前に作ったフォームではうまく動いていたのですが今回は動きません。
WEBなど、探したのですがいい回答が見つかりませんでした、作り直しも行いましたが
同じエラーが繰り返されます。
よろしくお願いします。
会社からなので画像の添付できませんでした、持ち出しができません。
フォームでテキスとボックスにAAAAと入力したらCCCCにカーソルを移動させたいです。
ラベル テキストボックス
aaaa AAAA
bbb  BBBB
ccc CCCC

「アクセス2007 フォーム入力でフィール」の質問画像

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

A 回答 (5件)

添付画像を拡大しても見えずらいのですが、


漏れている文字があるかもしれませんが、
大体以下のように見えます。

(質問のときはエラーの内容を書き取って
文章で伝えないと画面からは読み取れません。)



コマンドまたはアクション"コントロールの移動"は無効です。

データベースが読み取り専用であるか、以前のバージョンの
式から変更されていません。

アクションの対象となっているオブジェクトで現在確認されて
いるものがないか、アクティブビューにありません。

このデータベースで現在使用可能なコマンドまたはマクロ
アクションを使うようにしてください。



以上を噛み砕くと、



マクロは実行できません。

その理由は、

(1)データベースが読み取り専用になっているか、現在の
Accessのバージョンで使える式に変更してください。

(2)指定しているコントロールの名前を間違っている
可能性があります。

(3)現在のAccessのバージョンで使えるマクロを
作成してください。



まず、上記の(1)から(3)について確認してみてください。




>最初の回答も参考にさせていただきます。

の意味はわかりませんが、どうしてもマクロでしたいのか、
あるいは、コードは分からないのでコードはご遠慮申し上げます、
ということなのか、どちらかなのでしょうが、
「社員番号」の更新後処理で「資格コード」に
移動したいというのであれば、どのバージョンの
Accessでも以下の方法で事が足ります。


Private Sub 社員番号_AfterUpdate()
Me!資格コード.SetFocus
End Sub
    • good
    • 0
この回答へのお礼

piroin654さん
何度も回答を戴き、本当にたすかりました、またわからない人の内容を理解して
戴きおお助かりです。
教えて戴いたようにイベントプロシージャーに書いてみたらすぐできました、
私のやり方は根本が間違えていました、マクロビルダでやっていました。

お礼日時:2011/04/20 13:34

コントロールの移動


http://office.microsoft.com/ja-jp/access-help/HA …

上記に使い方が書かれています。
    • good
    • 0

No2です。


なぜNo2のような質問をしたかというと、
質問の前半の、

>アクセスのフォームで入力する際、社員番号のテキストボックスから
>資格コードまでジャンプさせたいと思います、
>やったのはプロパティで更新後処理の埋め込みマクロでアクションを
>コントロールの移動を使い引数に資格コードを使いました。
(この回答としてマクロではなく、コードでの回答を
http://oshiete1.watch.impress.co.jp/qa6679587.html
でしています。AAAAからCCCCへのフォーカスの移動)


と、後半の、


>フォームでテキスとボックスにAAAAと入力したらCCCCにカーソルを移動させたいです。
>ラベル テキストボックス
>aaaa AAAA
>bbb  BBBB
>ccc CCCC

の話がつがらないからです。とくに後半の部分は
質問された方はわかっておられるのでしょうが、
こちらには、
>テキスとボックスにAAAAと入力したらCCCCにカーソルを移動
と、テキストボックスAAAAとの関連がわかりずらいのです。


もしかしたら、
>テキスとボックスにAAAAと入力したらCCCCにカーソルを移動
は、
>テキストボックスAAAAに入力したらCCCCにカーソルを移動
なのですか?
    • good
    • 0

こちらの勘違いがあるかもしれないので、


NO1は無しにして、

たとえば、

Private Sub 社員番号_AfterUpdate()
Me!CCC.SetFocus
End Sub

のように、テキストボックスの「社員番号」
の更新後処理にテキストボックス「CCCC」に移動
したい、ということなのか、あるいは、

テキストボックスの「社員番号」の更新後処理に
フォームに表示するデータをテキストボックスの
「社員番号」に入力したものにしたいということ
なのか、どちらですか。
    • good
    • 0

http://oshiete1.watch.impress.co.jp/qa6679587.html

のNo2で回答していますが、試してみました?
    • good
    • 0

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

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

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

関連するカテゴリからQ&Aを探す

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

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

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

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

Qサブフォームに対してGoToRecordするには?

フォームに対してRequeryすると先頭のレコードへ移動してしまうので
Requeryする前のレコードの番号を取得して
Requery後にそのレコード番号へ移動したいのですが

Sub test()
i = Forms("Form").Controls("SubForm").Form.CurrentRecord
Forms("Form").Controls("SubForm").Requery
DoCmd.GoToRecord acActiveDataObject, Forms("Form").Controls("SubForm"), acGoTo, i
End Sub

これをすると、実行時エラー2498
指定した式は、いずれかの引数とデータ型が対応していません。
になりますが、
どこがおかしいのでしょうか?

Aベストアンサー

【要旨】
サブフォームのレコード移動では、対象サブフォームは引数で指定するのではなく、
SetFocusメソッドで移動後、引数を省略したGotoRecordを使用します:
  Forms("Form").Controls("SubForm").SetFocus
  DoCmd.GotoRecord , , acGoto, i

但し、「Requery前後でのレコード移動の回避」が目的の場合は、Requeryの
対象を「親フォームまたはサブフォームのFormオブジェクト」ではなく「サブフォーム
コントロール」とすればOkです。
 <現状・例1>
  Forms("Form").SetFocus
  DoCmd.Requery
 <現状・例2>
  Forms("Form").Requery
 <現状・例3>
  Forms("Form").Controls("SubForm").Form.Requery
 <代替策>
  Forms("Form").Controls("SubForm").Requery
  ※「現状・例3」との違い(→途中の「.Form」の有無)に注意。


【詳細】
> 実行時エラー2498

このエラーの直接の原因は、GotoRecordメソッドの第2引数に指定している
「Forms("Form").Controls("Subform")」の部分です。

ここに指定するのはオブジェクト名になりますが、そのデータ型は文字列型です。
一方、「~.Controls(~)」の形で指定した場合、取得できるのは
 a)オブジェクトそのもの
 b)そのオブジェクトのデフォルトプロパティ
のどちらかです(→状況によって変化します)。
(例えばテキストボックスなら、TextBoxオブジェクトまたはValueプロパティの値)

サブフォームのデフォルトプロパティは調べていませんが(汗)、少なくとも文字列
型のプロパティではないため、「型が一致しない」とのエラーとなります。
サブフォームのコントロール名を取得する場合は、
  Forms("Form").Controls("SubForm").Name
というように、Nameプロパティを明示的に指定する必要があります。

ただ、「サブフォームのレコード移動」の場合、明示的に「Name」プロパティを
指定しても解決には至りません(汗)
これは、GotoRecordメソッドの第2引数には、直接開いているオブジェクトの
名前のみが有効なためで、サブフォームを直接的に指定することはできない、
ということです。
(注:Microsoftの資料を探したわけではなく、経験則から記述していますので、
 私の勘違いでしたらご容赦願います(汗))

サブフォームのレコード移動には、冒頭に記述したとおり、「フォーカスの移動」と
「一部の引数を省略したGotoRecord」を使用します:
  Forms("Form").Controls("SubForm").SetFocus
  DoCmd.GotoRecord , , acGoto, i

なお、これも冒頭に書きましたが、サブフォームのRequeryの仕方には幾つか
方法がありますが、Requeryの対象を「コントロールとしてのサブフォーム」にすれば、
レコード移動が発生しませんので、GotoRecord自体が不要になります。
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsFrmHowToRequeryAndReturn.html

【要旨】
サブフォームのレコード移動では、対象サブフォームは引数で指定するのではなく、
SetFocusメソッドで移動後、引数を省略したGotoRecordを使用します:
  Forms("Form").Controls("SubForm").SetFocus
  DoCmd.GotoRecord , , acGoto, i

但し、「Requery前後でのレコード移動の回避」が目的の場合は、Requeryの
対象を「親フォームまたはサブフォームのFormオブジェクト」ではなく「サブフォーム
コントロール」とすればOkです。
 <現状・例1>
  Forms("Form").SetFocus
  DoCmd.Requery
 <現...続きを読む

Qフォームを開くときに、コンボボックスの値を選択(アクセスVBA)

こんにちは。
アクセスVBAで、フォームを開いたとき
(フォームのOpenイベント)に、
コンボボックスの値を選択したいのですが、
どういう方法が、あるでしょうか。

理想は、
フォームのOpenないし、Loadイベント内で、
コンボ0.ItemData(2).Selected
と、書くような感じです。
(無論、Selectedは使えませんでした)。

よろしくお願いします。

Aベストアンサー

これでいいのかな?
※テキスト書きなので検証していません

If コンボ0.ListCount > 0 Then
  コンボ0.Value = コンボ0.Column(0, 2)
End If

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

QAccess 更新キャンセルするには?

Access2000で作成しています。

フォーム上でデータを書き換え後、更新をしない場合はどうしたらよいのでしょうか?

【希望する流れ】
 1.データを変更
 2.「更新」ボタンクリック
    「データの更新をします。よろしいですか?」のメッセージ
  (1)更新する場合:データを更新
    「データが更新されました」のメッセージ
  (2)更新しない場合:データを変更前に戻す
    「データの更新がキャンセルされました」のメッセージ
 3.フォームを閉じる
 4.別のフォームを開く

この動作をフォーム上にある「更新」ボタンのクリック時イベントにすることはできますか?

とりあえず、現在は以下のようなものが作ってあります。

「VBA」
 Private Sub Form_BeforeUpdate(Cancel As Integer)
 '更新前確認
  If MsgBox("更新します。よろしいですか?", vbYesNo, "更新確認") = vbNo Then
  Cancel = True
  Me.Undo
  End If
 End Sub

「更新」ボタンクリック時(こちらはマクロです)
 ・フォームを閉じる
 ・別のフォームを開く

今の状況では、更新する場合は問題ないのですが、更新しない場合、
「このレコードを保存することができません。
 レコードを保存する時にエラーが発生しました。
 ・・・・・・・・・・・」
というメッセージが出てきてしまいます。

どのようにVBAを作ればよいでしょうか?
説明不足の場合、補足いたします。よろしくお願いします。

Access2000で作成しています。

フォーム上でデータを書き換え後、更新をしない場合はどうしたらよいのでしょうか?

【希望する流れ】
 1.データを変更
 2.「更新」ボタンクリック
    「データの更新をします。よろしいですか?」のメッセージ
  (1)更新する場合:データを更新
    「データが更新されました」のメッセージ
  (2)更新しない場合:データを変更前に戻す
    「データの更新がキャンセルされました」のメッセージ
 3.フォームを閉じる
 4.別のフォーム...続きを読む

Aベストアンサー

Private Sub Form_BeforeUpdate(Cancel As Integer)
 '更新前確認
  If MsgBox("更新します。よろしいですか?", vbYesNo, "更新確認") = vbNo Then
Me.Undo
MsgBox "データの更新がキャンセルされました"

  End If
End Sub

でどうでしょう?

Q新規レコード行を非表示にしたい

帳票形式で入力フォームを作成しています。

登録No(○○~△△)を入れると、入力レコード数(○○~△△)が制限されるようにしました。でも、フォーム上には新規レコード行が表示されていて邪魔なんです。新規レコードインジケータ(*表示)という奴です。

ユーザーが入力する際、紛らわしいので、新規レコード行ごと消したいのですが、そんなことできるのでしょうか? お知恵をお貸し下さい!

ちなみに、環境はAccess2002で、クエリをレコードソースにしてフォームを作成しています。

Aベストアンサー

フォームのプロパティの「追加の許可」を「いいえ」にしてみてください。

フォームのプロパティは、フォームの左上角の四角の部分をクリックして
表示できると思います。
(Access97の環境での確認なので異なるかもしれませんが)

QACCESSのフォームで次のレコードに移動しない方法を教えてください

Windows2000&ACCESS2000の環境です。
テーブルから連結したフォームに、例えばA,B,C,Dと4つのテキストボックスがあります。
A,B,C,Dと入力していくと、最後のDの入力を入力した後「Enter」キーを押すと次のレコードのA,B,C,Dが表示されます。(次のレコードの入力になってしまいます)
タブオーダー最後のDの入力のあとの「Enter」キーを押しても現在のレコードのAに戻る設定(やり方)を教えていただけると幸いです。

Aベストアンサー

フォームのプロパティで
 Tabキー移動:カレントレコード
にしてください。
既定値は「すべてのレコード」になっています。

Qテキストボックスの入力チェック(ACCESS VBA)

テキストボックスに何かを入力し、フォーカスが他のものに移動したときに、LostFocusイベントで入力内容のチェックをかけています。(文字数チェック、ストアドをつかって入力内容と一致するものがDBにあるかなど)

もし、入力が誤っている場合には他のものにフォーカスを移さず、そのテキストボックスにフォーカスを残したい(setfocusを使用)のですが、setfocusをしてもlostfocusされてしまうため、うまくいきません。

VBではValidateイベントというものがあるようですが、
VBAではみあたりません。

どなたかよい方法をご存知でしたら教えてください。

Aベストアンサー

>もし、入力が誤っている場合には他のものにフォーカスを移さず、そのテキストボックスにフォーカスを残したい

通常、テキストボックスに対しての入力(通常は文字入力後のEnterKeyを押すことや、フォーカスが移るような操作をした場合です。)にたいして
真っ先にBeforupdateイベントが発生します。
このイベントの中で入力が正しいかどうかを判断させ間違っていればこのイベントの引数であるCancelにTrueをセットしてこのイベント(関数)をExitしてください。入力に間違いがなければCancelにはなにもセットしなくてかまいません。

この時Access側でCancel=Trueであればこのテキストボックスに対する操作を破棄してフォーカスをロストする前の状態にとどめます。

Cancel<>Trueであればテキストボックスの変更を確定してAfterupdateイベントに移ります。


ですから、Beforupdateで入力チェックを行い、問題があればCanxel=trueでイベントを中止し、
問題がなければ次の処理をAfterupdateイベントに記述してください。

(Beforupdateイベント内では入力テキストボックス内の値が今変更しようとしている値になっています。しかしながらあくまでテキストボックスの変更が確定するのはBeforupdateイベントが終了してからです。)

>もし、入力が誤っている場合には他のものにフォーカスを移さず、そのテキストボックスにフォーカスを残したい

通常、テキストボックスに対しての入力(通常は文字入力後のEnterKeyを押すことや、フォーカスが移るような操作をした場合です。)にたいして
真っ先にBeforupdateイベントが発生します。
このイベントの中で入力が正しいかどうかを判断させ間違っていればこのイベントの引数であるCancelにTrueをセットしてこのイベント(関数)をExitしてください。入力に間違いがなければCancelにはなにもセッ...続きを読む

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。


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

人気Q&Aランキング