as Control について

解決


ペン個  2003-06-17 19:48:39  No: 78312

フォームで
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 20:12:52  No: 78313

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

public Sub enabled_false(con() As Control)

では?

# 未確認です。


ペン個  2003-06-17 20:20:08  No: 78314

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


nanashi  2003-06-17 20:24:58  No: 78315

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

すいません、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 20:29:17  No: 78317

>> 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 21:01:44  No: 78318

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加