2017-06-01 19 views
1

コードの知識が限られていると言ってこれを開始することができます。私は一般的にコンセプトを理解していますが、コンセプトを実装することは決してよくありませんでしたそれは私の周りに落ちたプロジェクトのコードスニペットです。Microsoft AccessでVBA内でワイルドカードを使用する

Option Compare Database 
Private Sub Form_Current() 
If IsNull(Me![OPT-78 (5900EL)]) Then 
    Me![OPT-78 (5900EL)].Visible = False 
    Me![OPT-78 (5900EL) Label].Visible = False 
Else 
    Me![OPT-78 (5900EL)].Visible = True 
    Me![OPT-78 (5900EL) Label].Visible = True 
End If 
If IsNull(Me![OPT-78 (7900EL)]) Then 
    Me![OPT-78 (7900EL)].Visible = False 
    Me![OPT-78 (7900EL) Label].Visible = False 
Else 
    Me![OPT-78 (7900EL)].Visible = True 
    Me![OPT-78 (7900EL) Label].Visible = True 
End If 
If IsNull(Me![OPT-152 (4310B)]) Then 
    Me![OPT-152 (4310B)].Visible = False 
    Me![OPT-152 (4310B) Label].Visible = False 
Else 
    Me![OPT-152 (4310B)].Visible = True 
    Me![OPT-152 (4310B) Label].Visible = True 
End If 

これは、「現在の」イベントのフォーム内にあります。今私はワイルドカードがこれらのすべてを制限することができることを知っていますが、単純なエレガントな単一のif文の解決策に至るまで、else文を使用することはできませんでした。私は*、%、__、そして?を試しましたが、運はありません。私はそこに清潔なソリューションがあることを望んでいるので、より多くの文が書かれる必要があります。

ありがとうございます!

+0

はおそらく 'SELECT'文はあなたのコードビットを短縮するためで加工することができますか? – UnseenSpecter

答えて

1

私は可視性を設定処理するためのサブを作成することから始めたい:

Sub SetVis(controlName as String) 
    Dim vis as Boolean 
    vis = Not IsNull(Me.Controls(controlName)) 
    Me.Controls(controlName).Visible = vis 
    Me.Controls(controlName & " Label").Visible = vis 
End sub 

その後、あなたは多分興味のあるものを見つけるために、フォームのControlsコレクションをループにより、ループからそのサブをドライブすることができます。

Dim c 
For Each c in Me.Controls 
    'some If statement here to see if this is a control you're interested in 
    'Might also want to check that the control type is a textbox so you can 
    ' skip the labels 
    If c.Name like "OPT*" And Not c.Name like "*Label" Then 
     SetVis CStr(c.Name) 
    End if 
Next c 

または名前の固定長配列に基づいて、単純なループ:

Dim c 
For Each c In Array("OPT-78 (5900EL)", "OPT-78 (7900EL)", "OPT-152 (4310B)") 
    SetVis CStr(c) 
Next c 
+0

ラベルがテキストボックスに添付されている場合は、テキストボックスを表示/非表示に設定するだけで、自動的にラベルが設定されることに注意してください(@Nogg)。 – Andre

+0

ありがとうございます。 @ Andre:ラベルは、視認性をオフにしてテキストボックスに従っていることがわかりましたが、後でそれを戻すときには表示されません。理由を知らない。 @Tim:あなたが投稿したコードを見ていました。これによって、異なる名前のテキストボックスの名前を取得できるかどうか疑問に思っていました。言い換えれば、私はテキストボックスOPT-1、OPT-12A、OPT-435をつかみ、内部の値がヌルであるかどうかに基づいてオンとオフを切り替えるようにしようとしています。私はループとwhilesを設定する方法に精通していません。私は約8年前に非常に基本的なプログラミングクラスを取った。 ;) – Nogg

+0

上記の私の編集を参照してください(すべてはテストされていませんが、一般的なアイデアを与える必要があります) –

関連する問題