Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
re:2つのトグルボタンの押下状態をお互いに切りかえる方法
投稿日時: 20/01/28 22:32:41
投稿者: takesi

'https://www.moug.net/faq/viewtopic.php?t=78985
'2つのトグルボタンの押下状態をお互いに切りかえる方法
'
ラベルでこのような動作ができました。
参考になれば幸いです。(win10/office365)
 
 
 
シートにラベル(ActiveXコントロール)を4個配置しBackColor を メニューバーにする。
 
Private Sub Label1_Click()
     Call tglCtrl_Proc
    Label1.SpecialEffect = fmSpecialEffectSunken
End Sub
 
Private Sub Label2_Click()
     Call tglCtrl_Proc
    Label2.SpecialEffect = fmSpecialEffectSunken
End Sub
 
Private Sub Label3_Click()
 Call tglCtrl_Proc
    Label3.SpecialEffect = fmSpecialEffectSunken
End Sub
 
Private Sub Label4_Click()
 Call tglCtrl_Proc
    Label4.SpecialEffect = fmSpecialEffectSunken
End Sub
 
Public Sub tglCtrl_Proc()
'参考 'https://excel-ubara.com/excelvba1/EXCELVBA437.html
Dim c
For Each c In Sheets("Sheet1").OLEObjects
   If c.Name Like "Label*" Then
      Sheets("Sheet1").OLEObjects(c.Name).Object.SpecialEffect = fmSpecialEffectRaised
   End If
Next c
End Sub
 
 
※このような投稿がマナー違反でしょうか。
後日解決済み投稿して閉じます。
 
 
 

回答
投稿日時: 20/01/29 07:57:32
投稿者: mattuwan44

>※このような投稿がマナー違反でしょうか。
あぁでもないこうでもないと、考えるのは楽しいし、
他人の視点も知れるのは勉強になります。
 
見させてもらって、
こういう時は凹む、
こういう時は凸る。
という操作が別々のところにあって、後で読んで
少し戸惑うかなと。
あと、同じことを何度も書かないようにすると、
メンテナンスの時に直す箇所が減るので、
そういうのに注意するといいと思いました。
 
Option Explicit
  
Private Sub Label1_Click()
    L_Click Me.Label1.Name
End Sub
  
Private Sub Label2_Click()
    L_Click Me.Label2.Name
End Sub
  
Private Sub Label3_Click()
    L_Click Me.Label3.Name
End Sub
  
Private Sub Label4_Click()
    L_Click Me.Label4.Name
End Sub
  
Private Sub L_Click(ByVal strName As String)
    Dim i As Long
    Dim s As String
      
    For i = 1 To 4
        s = "Label" & i
        Me.OLEObjects(s).Object.SpecialEffect = IIf(s = strName, 2, 1)
    Next
End Sub

投稿日時: 20/01/29 09:04:10
投稿者: takesi

なるほどです。
 
状態変更するとこは一か所で
すべてサーチするより個数分かっていれば決め打ちのほうが早い
 
検索した物のコピペで組み立てていて、もう一歩ですね。
勉強になります。