プロが教える店舗&オフィスのセキュリティ対策術

Private Sub WorkSheet Change(ByVal Target As Range)
Select Case ActiveSheet.Range(“B1”).Value
Case 1To 10:
TextBox1.BackColor = vbYellow
Case 11To 20:
TextBox1.BackColor = vbBlue
Case Else:
TextBox1.BackColor = vbRed
End Select
End Sub

このマクロでB1のセルの値に応じて
テキストボックス1の背景色を変えるところまでは
素人ながら作れたのですが
このselect case の分岐を保ったまま
変数を使って
B(変数)の値でテキストボックス(変数)の背景色を変えられるようにしたいのですが
どうしたら良いでしょうか?
ユーザーフォームを使わずに
ワークシート上で変数を適用させるのは無理なのでしょうか?

Dim i As integer
For i = 1 To 3
Select case ActiveSheet.Range(“B”& i).Value
Case 1 To 10:
ActiveSheet.Controls(“TextBox”& i).Backcolor = vbYellow
(省略)
End Select
Next I
と入力してみたのですがうまくいきませんでした…

どうかよろしくお願いします

質問者からの補足コメント

  • どう思う?

    回答ありがとうございます
    Meを使う方法も試してみたのですが
    どうしてもコンパイルエラーになってしまいます。
    このコードをそのまま実行してもエラーになります
    Meを使うのに何かしらの設定が必要なのでしょうか…?

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/04/18 07:56

A 回答 (2件)

>Meを使うのに何かしらの設定が必要なのでしょうか…?


必要はありません。
Me つまり、自分のこと。自分で誰かというと、Sheet(親)
[親].[子].[プロパティ]

No.1で、「シートモジュールのみ」と書かれていますが、Sheet1, Sheet2 ... など特定のオブジェクトモジュールに使われるキーワードです。

今回の場合は、シートの上に、ActiveX コントロールを使っていますので、同じシートのTextBox1と、同じところでコードを使うことになります。

これで、ワンパッケージ
----------TextBox1 -(Active X = OLE Object)---------
===== Sheet1 ===================
    Me.TextBox1
  VBA Code ---Event Driven //
「--------------VBA Pane-------」
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございます!
多分モジュールのアレコレを勘違いしていたようで
Meがちゃんと動きました!!
大変勉強になりました!
ありがとうございます!

お礼日時:2019/04/18 20:52

こういうことでしょうか。



'//シートモジュールのみ
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim i As Integer
 For i = 1 To 3
  Select Case Me.Range("B" & i).Value
   Case 1 To 10
    Me.OLEObjects("TextBox" & i).Object.BackColor = vbYellow
   Case 11 To 20
    Me.OLEObjects("TextBox" & i).Object.BackColor = vbBlue
   Case Else
    Me.OLEObjects("TextBox" & i).Object.BackColor = vbRed
  End Select
 Next i
End Sub
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!