過去ログ

                                Page     406
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼またまた タブについて  123 02/11/26(火) 15:41
   ┗Re:またまた タブについて  ぴかる 02/11/26(火) 15:54
      ┗Re:またまた タブについて  123 02/11/26(火) 17:07
         ┗Re:またまた タブについて  ichinose 02/11/26(火) 18:10
            ┣Re:またまた タブについて  ぴかる 02/11/26(火) 18:58
            ┃  ┗Re:またまた タブについて  123 02/11/27(水) 10:44
            ┗Re:またまた タブについて  123 02/11/27(水) 10:42
               ┣Exitイベント内では無理なんじゃ・・・??  つん 02/11/27(水) 13:23
               ┣Re:またまた タブについて  ichinose 02/11/27(水) 13:36
               ┗Re:またまた タブについて  Jaka 02/11/28(木) 10:07
                  ┗どちらの方法でもOKでした。  123 02/11/28(木) 19:21

 ───────────────────────────────────────
 ■題名 : またまた タブについて
 ■名前 : 123
 ■日付 : 02/11/26(火) 15:41
 -------------------------------------------------------------------------
   またまた タブについて教えてください。

TextBox1のタブが「1」
TextBox2のタブが「2」
になっています。

If TextBox1.Value <> "" Then
TextBox2.SetFocus
Else
TextBox1.SetFocus

としたいのですが、TextBox1が空白でも、
どうしてもTextBox2 へ タブが飛んでしまいます。

Cancel = True すると、
必ずTextBox1に何かを入力しないと他の作業ができません。
(フォームを閉じることもできません)

いったいどうしたらよいのでしょうか。
 ───────────────────────────────────────  ■題名 : Re:またまた タブについて  ■名前 : ぴかる  ■日付 : 02/11/26(火) 15:54  -------------------------------------------------------------------------
   123 さん、こんにちは。

私も以前に教えて頂きました。こんなんでどうでしょう?。
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  
  If KeyCode = vbKeyReturn Then
    If TextBox1.Value = "" Then
      KeyCode = 0
    Else
      TextBox2.SetFocus
    End If
  End If
  
End Sub
 ───────────────────────────────────────  ■題名 : Re:またまた タブについて  ■名前 : 123  ■日付 : 02/11/26(火) 17:07  -------------------------------------------------------------------------
   ▼ぴかる さん:
ありがとうございます。

すみません。付け加えなければいけないことがあります。

実は、TextBox1は、
KeyDownで書式を変更するようにしていて、
Exitである処理をして、それからTextBox2へタブを飛ばす
ようにしています。
その際に、TextBox1が空白であった場合に、TextBox1へFocusを
戻すようにしたいのです。

やはり、Exitの方で処理させないと いけないみたいです。
上記背景で可能でしょうか。

(最初に説明していればよかったのですが...すみませんでした。)


>私も以前に教えて頂きました。こんなんでどうでしょう?。
>Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
>  
>  If KeyCode = vbKeyReturn Then
>    If TextBox1.Value = "" Then
>      KeyCode = 0
>    Else
>      TextBox2.SetFocus
>    End If
>  End If
>  
>End Sub
 ───────────────────────────────────────  ■題名 : Re:またまた タブについて  ■名前 : ichinose  ■日付 : 02/11/26(火) 18:10  -------------------------------------------------------------------------
   ▼123 さん:
▼ぴかる さん:
こんばんは、横レス失礼します。
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1.Value <> "" Then
  TextBox2.SetFocus
' 次のTabindexがTextbox2なら、通常は要らないはずですが・・・
Else
  Cancel = True
  End If
End Sub
 ───────────────────────────────────────  ■題名 : Re:またまた タブについて  ■名前 : ぴかる  ■日付 : 02/11/26(火) 18:58  -------------------------------------------------------------------------
   ichinoseさん、こんにちは。

>こんばんは、横レス失礼します。
毎度、毎度、フォローありがとうございます。ちょっと、仕事が長引きそうなので申し訳ありませんがバトンタッチしてください。中途半端でゴメンナサイです。m(_ _)m
 ───────────────────────────────────────  ■題名 : Re:またまた タブについて  ■名前 : 123  ■日付 : 02/11/27(水) 10:44  -------------------------------------------------------------------------
   ▼ぴかる さん:
こんにちは。

お忙しいところ すみませんでした。
ありがとうございました。
 ───────────────────────────────────────  ■題名 : Re:またまた タブについて  ■名前 : 123  ■日付 : 02/11/27(水) 10:42  -------------------------------------------------------------------------
   ▼ichinose さん:

いつもいつも すみません。

説明不足ですみません。

空白でない場合は、Box2へ飛ぶ。
空白の場合は、Box1のまま。

なのですが、問題は、Cancel = True にすると
TextBox1が空白のままだと
他のTextBoxやコマンドボタンへ移ることができないのです。
(あたりまえですが)

マウスでフォーカスを移す場合や、Tabキーでフォーカスを移す場合
には、Cancelされないようにすればいいのかもしれませんが...

宜しくお願い致します。
 ───────────────────────────────────────  ■題名 : Exitイベント内では無理なんじゃ・・・??  ■名前 : つん <honey@sweetparty.ne.jp>  ■日付 : 02/11/27(水) 13:23  -------------------------------------------------------------------------
   こんにちは。横から失礼しますー

>マウスでフォーカスを移す場合や、Tabキーでフォーカスを移す場合
>には、Cancelされないようにすればいいのかもしれませんが...

このへんの判断を、Exitイベント内でするのは無理なんじゃないでしょうか?
KeyDownイベント内のKeyCodeで判断するしかないじゃないかなー?
(と、私のなけなしの知識を総動員したところそう思います)

KeyDownイベントやExitイベントで他の処理をされているとうことですが、
Changeイベント内では出来ないのかな?
他の処理はどんなことをしているのか明記されたら、よい案が出てくるかも・・
 ───────────────────────────────────────  ■題名 : Re:またまた タブについて  ■名前 : ichinose  ■日付 : 02/11/27(水) 13:36  -------------------------------------------------------------------------
   ▼123 さん:
こんにちは。はっきりとは把握してないんですが・・・。
例えば、フォームにテキストボックスをTextbox1〜Textbox3までの3つ貼り付けたとします。さらにコマンドボタンをひとつ(Commandbutton1)を貼り付けたフォームを想定しました。タブーオーダーは、Textbox1〜Textbox3、の順とし、Commanbutton1は、TabstopをFalseとします。
以下に示すコードは、Textbox1の内容が空白のときは、Textbox1にフォーカスを当て、Textbox1に何らかなの入力がされていれば、TabIndexあるいは、マウスにより指示されたコントロールにフォーカスが移ります。
但し、コマンドボタンが選択された場合は、Textbox1の内容にかかわらず、フォーカスを移します。
'======================================================
Dim f_ctrl As Control
'今回のコードでは、直接、見に行っていませんが、直前にアクティブだったコントロールを格納しておきます。直前のコントロールによって、処理を変える場合に使用します。
'=============================================================
Private Sub CommandButton1_Click()
MsgBox "ok"
End Sub
'==============================================================
Private Sub CommandButton1_Enter()
  Call chk_data(CommandButton1)
End Sub
'=====================================================================
Private Sub CommandButton1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Set f_ctrl = ActiveControl
End Sub
'======================================================================
Private Sub TextBox1_Enter()
  Call chk_data(TextBox1)
End Sub
'======================================================================
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Set f_ctrl = ActiveControl
End Sub
'======================================================================
Private Sub TextBox2_Enter()
  Call chk_data(TextBox2)
End Sub
'======================================================================
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Set f_ctrl = ActiveControl
End Sub
'======================================================================
Private Sub TextBox3_Enter()
  Call chk_data(TextBox3)
End Sub
'======================================================================
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Set f_ctrl = ActiveControl
End Sub
'======================================================================
Private Sub UserForm_Initialize()
  Set f_ctrl = TextBox1
End Sub
'======================================================================
Function chk_data(ctl) As Boolean
  Select Case TypeName(ctl)
   Case "TextBox"
    If TextBox1.Text = "" Then
      chk_data = False
      With TextBox1
       .SelStart = 0
       .SelLength = Len(.Text)
       .SetFocus
       End With
    Else
      chk_data = True
      End If
   Case "CommandButton"
      chk_data = True
   End Select
End Function

で仕様どおり動いていますが、動きがおかしいのですかね、それとも仕様なのか?
Textbox1で空白の状態でTabキーを使用すると、Textbox2のEnterイベントではじかれて、当初ここで、Textbox1にいくと思っていたんですが、実は次のTab順のTextbox3に行ってしまいます。ここでもEnterイベントでひっかかりますが、次のTab順のTextbox1に入ったところでようやく止まります。そのため、コマンドボタンのTabstopをFalseにしました。

Exitイベントを使うとすると、基本は、フォーカスが移ったコントロールのEnterイベントでチェックしよういう主旨ですが、工夫が必要そうです。
 ───────────────────────────────────────  ■題名 : Re:またまた タブについて  ■名前 : Jaka  ■日付 : 02/11/28(木) 10:07  -------------------------------------------------------------------------
   みなさま、おはようございます。

ichinoseさんと同じく?
もっと解ってないかもしれませんが..。
(これまでのレスをほとんど読んでません。)
こう言うことなのでしょうか?
良く解ってないので、ハズしているかもしれませんが。

もっと具体的に説明された方が良いと思います。
自分で書いたコードも添えて。

Dim Flg1 As Boolean

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  If Flg1 = True Then
    MsgBox "なんかの処理"
  End If
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = vbKeyReturn Then
    If TextBox1 = "" Then
     KeyCode = 0
     Flg1 = False
    Else
     Flg1 = True
    End If
  Else
    Flg1 = False
  End If
End Sub
 ───────────────────────────────────────  ■題名 : どちらの方法でもOKでした。  ■名前 : 123  ■日付 : 02/11/28(木) 19:21  -------------------------------------------------------------------------
   ▼Jaka さん ichinoseさん
こんばんは。

本日はやっと今になって 拝見させていただきました。

ありがとうございました。
jakaさんとichinoseさん
どちらの方法でもOKでした。

>もっと具体的に説明された方が良いと思います。
>自分で書いたコードも添えて。

jakaさんの言われる通り、コードも載せようと思ったのですが、
あまりにも余計なコードが入っていて、かえって混乱させて
しまうのではないかと思い、載せなかったのです。

今後は自分なりに簡略化したコードを載せるようにします。

ありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 406