Excel VBA質問箱 IV

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

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


35903 / 76738 ←次へ | 前へ→

【46024】Re:ユーザーフォーム上のラベル番号を自動取得出来ますか?
回答  Hirofumi  - 07/1/21(日) 14:09 -

引用なし
パスワード
   1、Classを使わない通常の方法
Labelは1〜3とします

Option Explicit

'設定するLableの個数
Private Const clngNumb As Long = 3

Private vntLetter As Variant

Private Sub UserForm_Initialize()
  
  Dim i As Long

  vntLetter = Array("○", "△", "□")
  
  For i = 1 To clngNumb
    Controls("Lable" & i).Tag = 0
  Next i
  
End Sub

Private Sub Label1_Click()

  Dim lngCount As Long
  
  lngCount = (UBound(vntLetter) + 1)
  With Label1
    .Tag = (.Tag + 1) Mod lngCount
    .Caption = vntLetter(.Tag Mod lngCount)
  End With

End Sub

Private Sub Label2_Click()

  Dim lngCount As Long
  
  lngCount = (UBound(vntLetter) + 1)
  With Label2
    .Tag = (.Tag + 1) Mod lngCount
    .Caption = vntLetter(.Tag Mod lngCount)
  End With

End Sub

Private Sub Label3_Click()

  Dim lngCount As Long
  
  lngCount = (UBound(vntLetter) + 1)
  With Label3
    .Tag = (.Tag + 1) Mod lngCount
    .Caption = vntLetter(.Tag Mod lngCount)
  End With

End Sub

2、Classを使った方法

UserFormのコードモジュールに以下を記述

Option Explicit

'設定するLableの個数
Private Const clngNumb As Long = 3

'Groupの値取得クラスの配列
Private clsLable() As Class1

Private Sub UserForm_Initialize()
  
  Dim i As Long
  Dim vntLetter As Variant

  vntLetter = Array("○", "△", "□")
  
  'LableのTagに初期値とClassを設定
  ReDim Preserve clsLable(1 To clngNumb)
  For i = 1 To clngNumb
    Controls("Label" & i).Tag = 0
    Set clsLable(i) = New Class1
    With clsLable(i)
      .Letter = vntLetter
      .LabelCnt = Controls("Label" & i)
    End With
  Next i
  
End Sub

Private Sub UserForm_Terminate()

  Dim i As Long

  For i = 1 To clngNumb
    Set clsLable(i) = Nothing
  Next i

End Sub

「挿入」→「クラスモジュール」でClass1を追加
Class1に以下を記述

Option Explicit

Private WithEvents lblMark As MSForms.Label
Private vntLetter As Variant

Private Sub Class_Terminate()

  Set lblMark = Nothing
  
End Sub

Private Sub lblMark_Click()

  Dim lngCount As Long
  
  lngCount = (UBound(vntLetter) + 1)
  With lblMark
    .Tag = (.Tag + 1) Mod lngCount
    .Caption = vntLetter(.Tag Mod lngCount)
  End With
  
End Sub

Public Property Let Letter(ByVal vntNewValue As Variant)

  vntLetter = vntNewValue
  
End Property

Public Property Let LabelCnt(ByVal lblNewValue As MSForms.Label)

  Set lblMark = lblNewValue
  
End Property
0 hits

【46016】ユーザーフォーム上のラベル番号を自動取得出来ますか? koba 07/1/21(日) 13:15 質問
【46018】Re:ユーザーフォーム上のラベル番号を自動... かみちゃん 07/1/21(日) 13:19 発言
【46020】Re:ユーザーフォーム上のラベル番号を自動... koba 07/1/21(日) 13:28 お礼
【46024】Re:ユーザーフォーム上のラベル番号を自動... Hirofumi 07/1/21(日) 14:09 回答
【46025】Re:ユーザーフォーム上のラベル番号を自動... Hirofumi 07/1/21(日) 14:18 回答
【46026】Re:ユーザーフォーム上のラベル番号を自動... koba 07/1/21(日) 14:24 お礼
【46040】Re:ユーザーフォーム上のラベル番号を自動... Hirofumi 07/1/21(日) 20:30 回答
【46062】Re:ユーザーフォーム上のラベル番号を自動... koba 07/1/22(月) 9:23 お礼

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