[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/07/26(Tue) 09:28
投稿者名:カムリン
Eメール:
URL :
タイトル:
マクロだけでフォーカス移動
テキストボックスへの入力が正しくなければ、
そのテキストボックスにフォーカスを移動させたいのですが、
マクロだけで、出来るでしょうか?

コントロールの移動を使ってみたのですが、
カレントレコードにフィールドが無いって感じのエラーになってしまいます。

コントロール名の部分には、
[Forms]![F-進捗メニュー]![textyy/mm]と書いてみました。

投稿時間:2005/07/26(Tue) 09:57
投稿者名:カムリン
Eメール:
URL :
タイトル:
追記
Accessの話です。
場違いだったでしょうか?

投稿時間:2005/07/26(Tue) 10:17
投稿者名:いな
Eメール:
URL :
タイトル:
Re: 追記
> Accessの話です。
> 場違いだったでしょうか?

Accessの話=場違いと考えるのは早計です
VBのフォームで○○したとき、Accessで××という動作(もしくは逆?)
という説明のしかたをしないと、

いったい何処から何処までがVB・Accessで操作したくて、
また、結果をAccess・VBのどちらにどのように表示したいのか?

という情報を記述すると、わかりやすいです。
テキストボックス、マクロっていうのは、果たしてVBなのか?Accessなのか?

投稿時間:2005/07/26(Tue) 12:16
投稿者名:カムリン
Eメール:
URL :
タイトル:
Re^2: 追記
> いったい何処から何処までがVB・Accessで操作したくて、
> また、結果をAccess・VBのどちらにどのように表示したいのか?
>
> という情報を記述すると、わかりやすいです。
> テキストボックス、マクロっていうのは、果たしてVBなのか?Accessなのか?

全部ACCESSです。

投稿時間:2005/07/26(Tue) 10:09
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: マクロだけでフォーカス移動
前後の文章から、Microsoft Access 上の開発と仮定して回答します。

> テキストボックスへの入力が正しくなければ、
> そのテキストボックスにフォーカスを移動させたいのですが、
> マクロだけで、出来るでしょうか?

Accessの場合、「正しくなければ、フォーカスを移動させる」のではなく、
「正しくなければ、フォーカスを脱出できないようにする」のが一般的です。

たとえば、テキストボックスの[更新処理前]イベントを使って、

  Private Sub TextBox1_BeforeUpdate(Cancel As Integer)
    If IsDate(TextBox1.Value) = False Then
      MsgBox "日付を入力してください", vbExclamation
      Cancel = True
    End If
  End Sub

のように記述すると、日付を入力するまで、テキストボックスを脱出できなくなります。
(正しい日付を入力するか、Escキーを押して入力処理をキャンセルすれば、フォーカス移動可能)

# VB6でいうところの、Validateイベントに近い機能です。


上記機能を使うのではなく、やはり、フォーカス移動自体が必要な場合には、
    「コントロールの移動」
の マクロ を使うか、または、
    DoCmd.GoToControl "TextBox1"
あるいは、
    TextBox1.SetFocus
のいずれかの VBA を使う事になります。

ただし、いずれのコードを使うにしても、そのコントロールがフォーカスを受け取れる状態に
なっていなければ、エラーが発生します。

このエラーを無視したい場合には、VBAでは、直前に「On Error Resume Next」ステートメントを
記述しておけば OK です。一方、マクロによる記述の場合は、同等機能が無い(?)ので、
マクロ条件式を使って、フォーカスが受け取れるかどうかの判定を行う必要があります。

投稿時間:2005/07/26(Tue) 12:20
投稿者名:カムリン
Eメール:
URL :
タイトル:
Re^2: マクロだけでフォーカス移動
実行ボタンを押した時に、必要な項目が入っているかチェックして、
ちゃんと入っていないtextにフォーカス移動したいので、
フォーカス移動自体が必要な場合ということになります。

> このエラーを無視したい場合には、VBAでは、直前に「On Error Resume Next」ステートメントを
> 記述しておけば OK です。一方、マクロによる記述の場合は、同等機能が無い(?)ので、
> マクロ条件式を使って、フォーカスが受け取れるかどうかの判定を行う必要があります。

よければ、具体的な判定方法を教えていただきたいです。

投稿時間:2005/07/26(Tue) 15:17
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: マクロだけでフォーカス移動
> > このエラーを無視したい場合には、VBAでは、直前に「On Error Resume Next」ステートメントを
> > 記述しておけば OK です。一方、マクロによる記述の場合は、同等機能が無い(?)ので、
> > マクロ条件式を使って、フォーカスが受け取れるかどうかの判定を行う必要があります。
> よければ、具体的な判定方法を教えていただきたいです。

よくないので、具体的な判定方法はお教えできませんが、一例をあげれば、
「TextBox1.Enabled = True」や「TextBox1.Visible = True」などの条件文になります。
サブフォームだったりすると、さらに該当行へのレコード移動の処理なども必要ですが。

# VBAを使った方が、多分楽。

投稿時間:2005/07/30(Sat) 12:24
投稿者名:カムリン
Eメール:
URL :
タイトル:
Re^4: マクロだけでフォーカス移動
マクロで、
アクションをコントロールの移動にしたら出来ました。
只、フォーカスを失った時に実行した場合、
自分自身を移動先にしても、自分にフォーカスを留めて置くことが出来なかったので、
一度、別コントロールに移動してから、自分に戻しました。

例[FROM]から移動しようとした場合

アクション:コントロールの移動
移動先:[FOCUS](この処理の為に配置したコントロールへ)
アクション:コントロールの移動
移動先:[FROM](自分へ)