Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13257 / 13644 ツリー ←次へ | 前へ→

【5986】TextBoxのフォーカス時ラベルの書式変更PartII 123 03/6/11(水) 13:54 質問
【6014】Re:TextBoxのフォーカス時ラベルの書式変更... ichinose 03/6/11(水) 23:00 回答
【6020】Re:TextBoxのフォーカス時ラベルの書式変更... 123 03/6/12(木) 12:28 発言
【6022】Re:TextBoxのフォーカス時ラベルの書式変更... ichinose 03/6/12(木) 13:23 発言
【6023】Re:TextBoxのフォーカス時ラベルの書式変更... Jaka 03/6/12(木) 13:39 発言
【6165】Re:TextBoxのフォーカス時ラベルの書式変更... 123 03/6/18(水) 9:53 お礼
【6301】今ごろ書いても見ないと思うけど...。 Jaka 03/6/23(月) 9:43 回答
【6313】余計な物が.... Jaka 03/6/24(火) 9:02 発言

【5986】TextBoxのフォーカス時ラベルの書式変更P...
質問  123  - 03/6/11(水) 13:54 -

引用なし
パスワード
   みなさん こんにちは。

初歩的な質問で恐縮ですが、
TextBoxが縦5列、横15列 並んでいます。
いわゆる入力フォーム(UserForm)になっています。

この上の列にラベルで項目名が並んでいます。
左縦には同様にラベルで項目名が並んでいます。

段間違い入力を避けるために、あるTextBoxがFocusされた時に
その最左横のラベルと最上段のラベルの書式を変えたいのです。
Excelシート上で あるセルを選択すると行名と列名がBOLDに
なるのと同じような効果を期待しています。

以前に同じようなご質問をさせて頂きましたが、今回はTextBoxの名前と
ラベルの名前に規則性が無いため応用が出来ません。

MouseDownで
UserForm1.Label1.Font.Bold = True
UserForm1.Label1.ForeColor = &HC0&

Exitで
UserForm1.Label1.Font.Bold = False
UserForm1.Label1.ForeColor = &H80000012

としてみましたが、TabやEnterで次のTextBoxへ移った時には
当然のことですが、上記が効きません。

また、TabIndexの順番を利用して、TextBox1のExit時に次のLabel
の書式を設定する方法と、上記を併用すればいいのかもしれませんが、
この方法は避けたいと思っています。

どなたか良い方法を教えてください。

【6014】Re:TextBoxのフォーカス時ラベルの書式変...
回答  ichinose  - 03/6/11(水) 23:00 -

引用なし
パスワード
   ▼123 さん:
こんばんは。
>
>以前に同じようなご質問をさせて頂きましたが、今回はTextBoxの名前と
>ラベルの名前に規則性が無いため応用が出来ません。
なければ作ったらどうでしょうか?
どこかでテキストボックスの名前と上段、左側のラベルの名前に関連性を持たせる方法が
簡単だと思いますが・・・。
例えば、

上段ラベルには、左から

c1 c2 c3 c4・・・・・・・c15とラベル名を付けます。

左側ラベルには、上から

r1 r2 r3 r4 r5 とラベル名付けます。

次にTextboxは、

左上段から

TextBox1 TextBox2 TextBox3 ・・・  TextBox15

TextBox16 TextBox17 TextBox18・・・・



TextBox61 ・・・・・・・・・・・・・・・・TextBox75
と付けたとしましょう(タブインデックス違ってもかまいません)。

Userform1のフォームモジュールに、
'=============================================================
Dim f_t_box As MSForms.TextBox
'=============================
Private Sub TextBox1_Enter()
  Call active_signal(TextBox1)
End Sub
'=============================
Private Sub TextBox2_Enter()
  Call active_signal(TextBox2)
End Sub
'=============================
Private Sub TextBox3_Enter()
  Call active_signal(TextBox3)
End Sub
'===============================
Private Sub TextBox4_Enter()
  Call active_signal(TextBox4)
End Sub
'===============================
Private Sub TextBox5_Enter()
  Call active_signal(TextBox5)
End Sub
'===============================
Private Sub TextBox6_Enter()
  Call active_signal(TextBox6)
End Sub
'================================
Private Sub TextBox7_Enter()
  Call active_signal(TextBox7)
End Sub
'================================
Private Sub TextBox8_Enter()
  Call active_signal(TextBox8)
End Sub
'・
'・
'・
'・
'というように75個のEnterイベントを作成する
'================================
Private Sub TextBox75_Enter()
  Call active_signal(TextBox75)
End Sub
'=================================
Sub active_signal(t_box As MSForms.TextBox)
  Call deactive_signal(f_t_box)
  i = Val(Mid(t_box.Name, Len("textbox") + 1))
  y = Int((i - 1) / 15) + 1
  x = i Mod 15
  If x = 0 Then x = 15
  Controls("r" & y).Font.Bold = True
  Controls("r" & y).ForeColor = &HC0&
  Controls("c" & x).Font.Bold = True
  Controls("c" & x).ForeColor = &HC0&
  Set f_t_box = t_box
End Sub
'==============================================
Sub deactive_signal(t_box As MSForms.TextBox)
  If Not t_box Is Nothing Then
    i = Val(Mid(t_box.Name, Len("textbox") + 1))
    y = Int((i - 1) / 15) + 1
    x = i Mod 15
    If x = 0 Then x = 15
    Controls("r" & y).Font.Bold = False
    Controls("r" & y).ForeColor = &H80000012
    Controls("c" & x).Font.Bold = False
    Controls("c" & x).ForeColor = &H80000012
    End If
End Sub


残念ですが、Enterイベントを一つにまとめる方法は知りませんが・・・。

【6020】Re:TextBoxのフォーカス時ラベルの書式変...
発言  123  - 03/6/12(木) 12:28 -

引用なし
パスワード
   ▼ichinose さん:こんにちは

いつもありがとうございます。

>>以前に同じようなご質問をさせて頂きましたが、今回はTextBoxの名前と
>>ラベルの名前に規則性が無いため応用が出来ません。
>なければ作ったらどうでしょうか?

残念ながら、TextBoxの名前を利用して、ある処理を行っていますので、
TextBoxの名前を変更することができないのです。

Labelの名前は、横に Label1、Label2 ......、縦に Label101、Label102 ..... となっておりますが...。

最初にはっきり言っておけばよかったです。すみませんでした。

Exitの反対がないと不都合なこともあるんですね。
やはり、EnterでTabIndexが次ぎのTextBoxに移る時を利用するしかないのでしょうかね。

【6022】Re:TextBoxのフォーカス時ラベルの書式変...
発言  ichinose  - 03/6/12(木) 13:23 -

引用なし
パスワード
   ▼123 さん:
こんにちは。
>
>>>以前に同じようなご質問をさせて頂きましたが、今回はTextBoxの名前と
>>>ラベルの名前に規則性が無いため応用が出来ません。
>>なければ作ったらどうでしょうか?
>
>残念ながら、TextBoxの名前を利用して、ある処理を行っていますので、
>TextBoxの名前を変更することができないのです。

そうですか。でも、関連付けができれば・・・ということが
わかっていれば、方法としては色々ありますよね!!
テキストボックスの名前で処理したのは、変数の節約したためですから。

>
>Labelの名前は、横に Label1、Label2 ......、縦に Label101、Label102 ..... となっておりますが...。

ラベルの名前に規則性があれば、同じ要領だと思いますよ。

>
>最初にはっきり言っておけばよかったです。すみませんでした。
>
>Exitの反対がないと不都合なこともあるんですね。
>やはり、EnterでTabIndexが次ぎのTextBoxに移る時を利用するしかないのでしょうかね。
TabIndexもひとつの方法ですよね。
何故、他の方法を探しているんですか?
「同じようなEnterイベントの記述が嫌だから」ですか?
もしそうだとしたら、私もいつも悩んでいる事ですが・・。

【6023】Re:TextBoxのフォーカス時ラベルの書式変...
発言  Jaka  - 03/6/12(木) 13:39 -

引用なし
パスワード
   ichinose さん 123 さん
こんにちは。

全体像を良く把握していません。
ControlTipTextを使ってみるとか....。

失礼しました。

【6165】Re:TextBoxのフォーカス時ラベルの書式変...
お礼  123  - 03/6/18(水) 9:53 -

引用なし
パスワード
   ▼Jaka さん,ichinose こんにちは。

お返事が遅れてしまいまして失礼致しました。

いろいろと ありがとうございました。

いろいろとやってみましたが、ExitとKeydwonでは
Exitの方が有効になってしまうので、
Exitで そのTextBoxに対応するLabelのNameを変数に代入して
次のTextBoxでMouseDownした時に変数に代入したLabelの書式を
変更するようにしました。
また、TextBoxで、KeyCode 13 または9を KeyDownした時
TabIndexで指定してある次のTextBoxに対応するLabelの書式を
変更するようにしました。
以下のものをTextBox数分 記述しました。
多分 無駄なことをしているとは思いますが、私の知識では
これが限界でした。


標準モジュール------------
Sub L1通常()
UserForm.Label1.Font.Underline = False
UserForm.Label1.ForeColor = &H80000012
End Sub

Sub L1選択()
UserForm.Label1.Font.Underline = True
UserForm.Label1.ForeColor = &HC0&
End Sub

Sub L2通常()
UserForm.Label2.Font.Underline = False
UserForm.Label2.ForeColor = &H80000012
End Sub

Sub L2選択()
UserForm.Label2.Font.Underline = True
UserForm.Label2.ForeColor = &HC0&
End Sub

UserFormのモジュール----------
Dim 前ctl1 As String,前ctl2 As String

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then
L1通常
L2選択
End If
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
前ctl1 = "Label1"
前ctl2 = "Label101"
End Sub

Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
On Error Resume Next
Controls(前ctl1).Font.Underline = False
Controls(前ctl1).ForeColor = &H80000012
Controls(前ctl2).Font.Underline = False
Controls(前ctl2).ForeColor = &H80000012
L1選択
L101選択
End Sub

【6301】今ごろ書いても見ないと思うけど...。
回答  Jaka  - 03/6/23(月) 9:43 -

引用なし
パスワード
   おはようございます。
結構手抜いて書いてます。
キー操作だけの事で考えました。
クラスとか使っていません。

フォームレイアウトが、こんな場合として書いてあります。

Label1   Label2   Label3
textBox1  textBox5  textBox9
textBox2  textBox6  textBox10
textBox3  textBox7  textBox11
textBox4  textBox8  textBox12
            CommandButton1


Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 38 Or KeyCode = 40 And Left(ActiveControl.Name, 4) = "Text" Then
    LabelFont 1
  End If
End Sub

Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 38 Or KeyCode = 40 And Left(ActiveControl.Name, 4) = "Text" Then
    LabelFont 1
  End If
End Sub

Private Sub TextBox3_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 38 Or KeyCode = 40 And Left(ActiveControl.Name, 4) = "Text" Then
    LabelFont 1
  End If
End Sub

Private Sub TextBox4_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 38 Or KeyCode = 40 And Left(ActiveControl.Name, 4) = "Text" Then
    LabelFont 1
  End If
End Sub

Private Sub TextBox5_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 38 Or KeyCode = 40 And Left(ActiveControl.Name, 4) = "Text" Then
    LabelFont 2
  End If
End Sub

Private Sub TextBox6_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 38 Or KeyCode = 40 And Left(ActiveControl.Name, 4) = "Text" Then
    LabelFont 2
  End If
End Sub

Private Sub TextBox7_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 38 Or KeyCode = 40 And Left(ActiveControl.Name, 4) = "Text" Then
    LabelFont 2
  End If
End Sub

Private Sub TextBox8_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 38 Or KeyCode = 40 And Left(ActiveControl.Name, 4) = "Text" Then
    LabelFont 2
  End If
End Sub

Private Sub TextBox9_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 38 Or KeyCode = 40 And Left(ActiveControl.Name, 4) = "Text" Then
    LabelFont 3
  End If
End Sub

Private Sub TextBox10_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 38 Or KeyCode = 40 And Left(ActiveControl.Name, 4) = "Text" Then
    LabelFont 3
  End If
End Sub

Private Sub TextBox11_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 38 Or KeyCode = 40 And Left(ActiveControl.Name, 4) = "Text" Then
    LabelFont 3
  End If
End Sub

Private Sub TextBox12_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 38 Or KeyCode = 40 And Left(ActiveControl.Name, 4) = "Text" Then
    LabelFont 3
  End If
End Sub

Sub LabelFont(No)
  For i = 1 To 3
    With Me.Controls("Label" & i)
      If i = No Then
        .Font.Underline = True
        .ForeColor = &HC0&
      Else
        .Font.Underline = False
        .ForeColor = &H80000012
      End If
    End With
  Next
  DoEvents
End Sub

Private Sub UserForm_Initialize()
  With Label1
    .Font.Underline = True
    .ForeColor = &HC0&
  End With
End Sub

Private Sub CommandButton1_Click()
  Unload Me
End Sub

Private Sub CommandButton1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  For i = 1 To 3
    With Me.Controls("Label" & i)
      .Font.Underline = False
      .ForeColor = &H80000012
    End With
  Next
  DoEvents
End Sub

【6313】余計な物が....
発言  Jaka  - 03/6/24(火) 9:02 -

引用なし
パスワード
   この部分は余計でしたね。

And Left(ActiveControl.Name, 4) = "Text"

13257 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free