[[20120719095204]] 『ユーザーフォームのタブオーダー』(マッキー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォームのタブオーダー』(マッキー)

 Excel2007でユーザーフォームを使用しているブックがいくつかあります。
 ユーザーフォームには全てタブオーダーを設定して、TabキーやEnterキーでカーソルが移動するように
 していますが、時々そのタブオーダーが効かなくなって、TabキーやEnterキーを押しても
 カーソルが同じ場所から動かなくなる時があります。
 規則性が分からないのですが、主にテキストボックスからテキストボックスへ移動する時が
 多いような気がします。
 いくつかのブックで発生するので、特定のユーザーフォームのコードが原因とは思えなくて…
 (もしかしたら共通して同じコード記述ミスがあったりするかもしれませんが…)

 一度ユーザーフォームを閉じてまた開き直すと戻ります。

 これはExcelの仕様ですか?それとも何か設定がおかしいのでしょうか?

 そのタブオーダーが働かなくなるテキストボックスに関するイベントプロシジャがあればコードをアップしてみればどうだろう?

 ExitイベントやBeforeUpdateイベントで条件によって Cancel=Trueが記述されているとか。

 (ぶらっと)

 ありがとうございます。
 特にイベントプロシージャなどはありません。
 コマンドボタン(Nyuryoku)をクリックでシートに転記するようなものです

 Private Sub Nyuryoku_Click()

        Dim Hiduke As Date

        If IsDate(SyukkaDate.Text) = True Then

            Hiduke = Format(SyukkaDate.Text, "yyyy/mm/dd")

            SyukkaDate.Text = Hiduke

        Else

            MsgBox "日付はyyyy/m/dで入力してください", vbInformation

            Exit Sub

        End If

    Dim g0 As Long
    Dim lRow As String

    With Worksheets("出荷")
       lRow = .Range("A" & Rows.Count).End(xlUp).Row + 1

        For g0 = 1 To 8
            If Controls("Syohin" & g0) = "" Then Exit For

            .Cells(lRow, "a").Value = Denpyo.Text
            .Cells(lRow, "b").Value = Controls("Syohin" & g0).Value
            .Cells(lRow, "c").Value = Controls("Syukkasu" & g0).Value  '←ここがテキストボックス
            .Cells(lRow, "d").Value = SyukkaDate.Text

                lRow = lRow + 1

        Next g0

    End With

 End Sub

 Syohin1〜8のテキストボックスがあり(8個)、エンターキーでSyohin1→Syohin2…と移動するようになっています。

 (マッキー)

 う〜ん・・・わからないなぁ。他の回答者さんの回答を待とうね。

 ところで、Enterだけじゃなく Tabキーでも進まないということだよねぇ・・・
 Enterはきかないけど、Tabキーなら動くということなら、設定によってはありうるけどねぇ・・・

 それと、その状態になった時、カーソルは見えている?それとも消えている?
 それと、フォームはモーダル表示?モードレス表示?

 たとえば以下のようなコードを追加しておいて、フォーカスが動かなくなった状態でユーザーフォームをクリックすると
 どのコントロール名がでるかを確認してみるとか?

 Private Sub UserForm_Click()
    MsgBox ActiveControl.Name
 End Sub

 (ぶらっと)


 あてずっぽうの追加で。

 テキストボックスのEnterKeyBehavior,TabKeyBehavior,MultiLineプロパティはどうなっているだろうか?
 (でも、今、当方で推測していることは、はずしている公算大。もし、推測通りなら、いつも、そうなるので)

 (ぶらっと)

 >Enterだけじゃなく Tabキーでも進まないということだよねぇ・・・
 はい、そうです。

 >その状態になった時、カーソルは見えている?それとも消えている?
 カーソルは見えています。(テキストボックスの中で縦線のカーソルが点滅しています)

 >フォームはモーダル表示?モードレス表示?
 モードレス?(ShowModal = False)です。

 >EnterKeyBehavior,TabKeyBehavior,MultiLineプロパティ
 すべてFalseです。

 追加いただいたコードは現象が起きたら確認します(今何度か試しましたが今は発生しなかったので…)

 (マッキー)

 今現象が発生しましたのでユーザーフォームにカーソルをあててみました。

 Syukkasu1 というテキストボックスから Syukkasu2 に移動したいのに移動ができなくなった時にユーザーフォームを
 クリックすると、Syukkasu1 がメッセージボックスに表示されます。
 手動でカーソルを Syukkasu2 に移動した後だと Syukkasu2 と表示されます。

 (マッキー)

 カーソルが点滅しているのであたりまえといえばあたりまえだけど、システム的にも、フォーカスが消えているような
 状態だけど、ちゃんと Syukkasu1 がアクティブコントロールだと認識しているということだねぇ・・・

 それで、なぜタブやエンターーが効かないのか????
 やっぱり、わからないなぁ・・・

 (ぶらっと)

 この現象が発生した時、タブキーとエンターキーでは動作が違っていて、
 タブキー→テキストボックス内で「タブ」のスペースが入力される(VBEの画面でタブキーを押すのと同じような感じ)
 エンターキー→全く何も動作なし
 となります。

 特定のブックではなく複数のブックで発生することがよく分かりません…
 また、特定のPCで発生するわけでもないようです。
 あと、これは憶測ですが
 ・コントロールの数が多いユーザーフォーム
 ・最初に作成した後、何かコードの追加修正を行ったユーザーフォーム
 で発生しやすい気がしますが、これは定かではありません…

 (マッキー)

 わからないねぇ・・・
 ずっとうえのほうでコメントしたけど、
 TabKeyBehavior が True なら テキストボックス内でタブ機能が働いて、コントロールの移動は発生しないし
 また MultiLine と EnterKeyBehavior がTrueなら、これもテキストボックス内の改行で、コントロールの移動は発生しない。

 で、もし、テキストボックスの高さが普通の高さなら、エンターでの改行も、視覚的には、カーソルが動いていないように
 感じるかもしれない。

 プロパティ設定は、いずれも False ということだから、【何かのひょうしに】これらの値が True になったとか?

 タブキーによってカーソルが動くのは確認できたようなので、今度は、テキストボックスの高さを十分に高くして
 次回、発生したときにエンターキーをおしてみると、カーソルは次の行にうごいていないかな?

 (ぶらっと)

 次回発生したときのためにUserForm_Clickを以下に変えておいて、障害時のそれぞれの値を確認することも
 無駄ではないかも。

 Private Sub UserForm_Click()
    With Syukkasu1
        MsgBox .TabKeyBehavior & vbLf & .EnterKeyBehavior & vbLf & .MultiLine
    End With
 End Sub

 その前に、VBE画面の編集->検索でカレントプロジェクトにチェックした上で
 EnterKeyBehavior あたりを検索して、どこかで値をセットしていないかどうか、確かめるというのは
 どうだろう。

 (ぶらっと)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.