|
▼いちご さん:
おはようございます。朝が早いんですね(^^
> ここで,また,新しい課題ができてしまいました。
>ファイルを開いたと時に,セルを指定してすぐに入力待ちにして,
>1〜5の数字を順に入力していくことはできたのですが,2番目の
>質問項目に移すのにどうしてよいかわかりません。
> もちろん,マウスで,新しく入力するセルをクリックすればよい
>のですが,マクロでしたいと思っています。
> また,テキストボックスをアクティブにして,入力待ちの状態を
>解除する方法は,ないものでしょうか。Escキーを押すことで,セル
>がアクティブになり,文字列を入力することはできるのですが,入
>力後,すぐに,テキストボックスが,アクティブになるので,文字
>列を入力しようとするたびに,Escキーを押さなければなりません。
> セルがアクティブになっているモードとテキストボックスがアク
>ティブになっているモードが,切り替えられると,ありがたいと思
>っています。よろしくお願いします。
とりあえず、後半のご質問の件ですが、
従来のコードを以下のようにしてみてください。
モジュール内でどのプロシージャからも参照できる変数 BoxMode を
追加し、これを「TextBox入力モード」のとき ON、セル入力モードのとき
OFF とするようにします。
どこで切り替えるかというと、TextBoxにFocusが当たったときとFocusを
失ったとき(TextBoxで[ESC]を押したときとか、セルをマウスで選択したとき
このイベントが発生します)とします。
また、選択セルが移動したとき、これまでは無条件に TextBoxをActivate
していましたが、これも、「Box入力モードがONのとき」だけと条件をつけます。
'------------------------------------ シートモジュール
Option Explicit
Private BoxMode As Boolean '★追加
Private Sub TextBox1_Change()
Dim i As Long
With TextBox1
If Len(.Text) = 0 Then Exit Sub
i = Val(.Text)
Select Case i
Case 1 To 5
With ActiveCell
.Value = i
.Offset(1).Select
End With
Case Else
Beep '★任意追加
End Select
.Text = ""
.Activate
End With
End Sub
Private Sub TextBox1_GotFocus() '★追加
TextBox1.BackColor = vbYellow
BoxMode = True
End Sub
Private Sub TextBox1_LostFocus() '★追加
TextBox1.BackColor = vbWhite
BoxMode = False
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With TextBox1
.Left = Target.Left
.Top = Target.Top
If BoxMode Then .Activate '★変更
End With
End Sub
------------------
さて、前半の
セルの移動をマクロから制御したいとか、
セルが移動したとき、セル入力モードの範囲だったら、テキストボックス
からセルにフォーカスを移動するなどの処理は、
やってできないことではないかと思うのですが、
こちらではシートのレイアウトが分からないので無理な相談です。
いちど 数字1文字入力範囲と そうでない入力範囲がどのようになっている
のか(おそらく共通の特徴があると思いますから)整理してみてください。
たぶん、n行目まで1文字(数字)を入力した後は、文字列を入力し、その後
次の列の m行目に移動して、 同じことを繰り返す。。。
などという法則があるのではないかと思います。
|
|