フォームで
call enabled_false(Me.Check1)
'me.check1はチェックボタンでコントロール配列になっている
標準モジュールで
public Sub enabled_false(con As Control)
Dim s As Integer
For s = 5 To 11
con(s).Enabled = True
Next
End Sub
標準モジュールでコントロール配列のEnabled をTrueやFalseにしたいのですが
やり方がわからないので誰か教えてください
Me.Check1 がコントロール配列になっているならば、
public Sub enabled_false(con() As Control)
では?
# 未確認です。
返答ありがとうございます
その方法は試してみましたが
出来ませんでした。
コントロール配列をまるごと引数に渡すことは出来ないはずです。
代替案としてControlsコレクションを使ってみてはいかがでしょうか?
'フォームで
call enabled_false("Check1")
'標準モジュールで
public Sub enabled_false(str As String)
Dim lCnt As Long
For lCnt = 5 To 11
Me.Controls(str)(lCnt).Enabled = True
Next
End Sub
すいません、Meじゃないですね。
フォームもByrefで一緒に渡してあげてください。
'フォームで
call enabled_false(Me, "Check1")
'標準モジュールで
public Sub enabled_false(frm As Form, str As String)
Dim lCnt As Long
For lCnt = 5 To 11
frm.Controls(str)(lCnt).Enabled = True
Next
End Sub
>> public Sub enabled_false(con As Control)
それを、
Public Sub enabled_false(ByVal con As Object)
のように宣言してください。これで動作すると思います。
> Me.Check1 がコントロール配列になっているならば、
> public Sub enabled_false(con() As Control)
コントロール配列は、「Controlの配列」ではなく、
実際には、一種のコレクションオブジェクトなのです。
例えば、通常の配列は、要素の下限値/上限値を調べるために、
LBound/UBound関数を使って、「Debug.Print UBound(aaa)」のように
書きますよね。
しかしコントロール配列は、本当の意味では配列ではないため、
LBound/UBound関数を使うことはできません。
かわりにLBound/UBoundプロパティを使って、
「Debug.Print Me.Check1.UBound」のように記述する事になります。
この事からも、「コントロール配列は、配列ではない」事が
わかっていただけるのではないでしょうか。
nanashiサン、魔界の仮面弁士サンありがとうございました。
魔界の仮面弁士サンの方を使わせてもらいました。
ツイート | ![]() |