2017-12-06 16 views
0

こんにちは、私は、ユーザーが(現在の月が表示され、デフォルトでは)日付を選択できるカレンダーですフォームを設定しようとしていますは、文字列

を使用してVBAのフォームオブジェクトを設定します。このフォームは、42のコマンドボタン(私はデフォルトの名前、つまりCommandButton1を残しています)を設定しています。これは、日番号を設定しています。

現時点では、私は各ボタン(私はそれをすべて入力するのではなく、これを生成するためにExcelを使用しました)のコードを長時間巻いていますが、それは問題の月の外にある場合にボタンをロックし隠しますこのように:ややコードアップをneatens ..which

Dim objCommandButton As Object 
Set objCommandButton = NewDate.CommandButton1 

NewDate.CommandButton1.Caption = Format(DATlngFirstMonth - DATintDayNumFirst + DATintX, "dd") 
If DATintX < DATintDayNumFirst Then 
    With NewDate.CommandButton1 
     .Locked = True 
     .Visible = DATbooShowExtraDays 
     .ForeColor = RGB(150, 150, 150) 
    End With 
Else 
    With NewDate.CommandButton1 
     .Locked = False 
     .Visible = True 
     .ForeColor = RGB(0, 0, 0) 
    End With 
End If 

私は私がして、コマンドボタンを参照することができることを知っています。しかし、私がやりたいことはコマンドボタンを文字列として参照するので、すべて42をループすることができます。

Dim n as integer 
n = 1 

Do Until n > 42 
Set objCommandButton = NewDate.CommandButton & n 
'Some operations 
n = n + 1 
Loop 

多くのお手伝いがあります。

答えて

0

することができますフォームのすべてのコントロールをループ。そして、あなたがします。Debug.Printまたは何の代わりに条件式(そして...場合)を置くことができる

Sub LoopButtons() 
Dim it As Object 

For Each it In NewDate.Controls 
    Debug.Print it.Name 
Next it 

End Sub 

を試してみてください。たとえば

If Instr(it.Name, "CommandButton") Then 
'do your code 
end if 
+0

大変ありがとうございます。MarcinSzaleniec! –

0

ここでは、アクティブシート上のActiveXコントロールを反復コードです:

Sub IterateOverActiveXControlsByName() 
    Dim x As Integer 
    Dim oleObjs As OLEObjects 
    Dim ctrl As MSForms.CommandButton 
    Set oleObjs = ActiveSheet.OLEObjects 
    For x = 1 To 10 
     Set ctrl = oleObjs("CommandButton" & x).Object 
    Next 
End Sub