as Control について

解決


ペン個  2003-06-17 10:48:39  No: 78312  IP: [192.*.*.*]

フォームで
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にしたいのですが
やり方がわからないので誰か教えてください

編集 削除
名前なし  2003-06-17 11:12:52  No: 78313  IP: [192.*.*.*]

Me.Check1 がコントロール配列になっているならば、

public Sub enabled_false(con() As Control)

では?

# 未確認です。

編集 削除
ペン個  2003-06-17 11:20:08  No: 78314  IP: [192.*.*.*]

返答ありがとうございます
その方法は試してみましたが
出来ませんでした。

編集 削除
nanashi  2003-06-17 11:24:58  No: 78315  IP: [192.*.*.*]

コントロール配列をまるごと引数に渡すことは出来ないはずです。
代替案として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

編集 削除
nanashi  2003-06-17 11:27:05  No: 78316  IP: [192.*.*.*]

すいません、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

編集 削除
魔界の仮面弁士  2003-06-17 11:29:17  No: 78317  IP: [192.*.*.*]

>> 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」のように記述する事になります。

この事からも、「コントロール配列は、配列ではない」事が
わかっていただけるのではないでしょうか。

編集 削除
ペン個  2003-06-17 12:01:44  No: 78318  IP: [192.*.*.*]

nanashiサン、魔界の仮面弁士サンありがとうございました。
魔界の仮面弁士サンの方を使わせてもらいました。

編集 削除