2017-06-22 10 views
0

この質問は特に技術的ではなく、より理論的です。フォーム/ VBA - ステータスに基づいてコントロールを有効にする

私は時々アクセスする "プロジェクトキュー"のことをやっています。私たちはいくつかのステップを経てきました。私は、特定のステップで意味をなさないボタンを隠し、最も関連性の高いタブに星を追加しています。たとえば、プロジェクトの開発が割り当てられている場合、プロダクションに移す前にテストを行う必要があるため、「プロダクションに移動」ボタンは非表示になっています。私はまた、開発タブの名前をDevelopment *に変更して、それをキューに入れます。

VBAではすべてがハードコードされていましたが、それでも問題はありませんが、維持するのに時間がかかり、醜いです。私は誰かがベストプラクティスを持っているのか、それとも一般的な提案があるのか​​疑問に思います。私は6つのステータスを持っていましたが、私は12になります。これをもっとうまくやることを考えなければなりません。

ボタンをクリックすると、あなたがこのようなコードブロックを得る:

Private Sub AssignScoping_Click() 
    Me.RequestStatus.Enabled = True 
    Me.RequestStatus = "Scoping" 
    Me.RequestStatus.Enabled = False 
End Sub 

各ボタンは、ちょうどこのようになります。残りのロジックを駆動するRequestStatusフィールドに異なるテキスト値を割り当てます。

Private Sub setButtonAvailability() 

Select Case Me.RequestStatus 
    Case Null 
    Me.PlaceInQueue.Visible = True 
    Me.PlaceInQueue.Enabled = True 
    Me.AssignScoping.Visible = False 
    Me.AssignScoping.Enabled = False 
    Me.AssignDevelopment.Visible = False 
    Me.AssignDevelopment.Enabled = False 
    Me.AssignTesting.Visible = False 
    Me.AssignTesting.Enabled = False 
    Me.AssignProduction.Visible = False 
    Me.AssignProduction.Enabled = False 
    Me.AssignAutomation.Visible = False 
    Me.AssignAutomation.Enabled = False 

    Me.Tabs.Pages("Intake").Caption = "Intake" & "*" 
    Me.Tabs.Pages("Scoping").Caption = "Scoping" 
    Me.Tabs.Pages("Development").Caption = "Development" 
    Me.Tabs.Pages("Testing").Caption = "Testing" 
    Me.Tabs.Pages("Production").Caption = "Production" 
    Me.Tabs.Pages("Automation").Caption = "Automation" 

... 


    Case Else 
    Me.PlaceInQueue.Visible = True 
    Me.PlaceInQueue.Enabled = True 
    Me.AssignScoping.Visible = True 
    Me.AssignScoping.Enabled = True 
    Me.AssignDevelopment.Visible = True 
    Me.AssignDevelopment.Enabled = True 
    Me.AssignTesting.Visible = True 
    Me.AssignTesting.Enabled = True 
    Me.AssignProduction.Visible = True 
    Me.AssignProduction.Enabled = True 
    Me.AssignAutomation.Visible = True 
    Me.AssignAutomation.Enabled = True 

    Me.Tabs.Pages("Intake").Caption = "Intake" 
    Me.Tabs.Pages("Scoping").Caption = "Scoping" 
    Me.Tabs.Pages("Development").Caption = "Development" 
    Me.Tabs.Pages("Testing").Caption = "Testing" 
    Me.Tabs.Pages("Production").Caption = "Production" 
    Me.Tabs.Pages("Automation").Caption = "Automation" 

    End Select 
End Sub 

私は、目的のためだけにテーブルに制御情報を入れておくことを含むたくさんのオプションがあると思いますが、自分の仕事で孤立して働く傾向があるので、私はあなたの集団のノージンから、私はいつもtとは思っていません彼は何かをする最善の方法、私は今すぐそれを行うことができる方法。

答えて

0

テキストボックスとコンボボックスでは、条件付き書式設定ルールを使用して、有効/無効状態を設定できます。

どのようなアプローチをとっても、プロパティを設定するために各コントロールに「タッチ」する必要があります。 1つのアプローチは、各コントロールを名前で明示的に参照する必要がなく、コントロールのコレクションを総称的にループし、いくつかの基準に従ってEnabledプロパティまたはVisibleプロパティを設定することです。コントロールのTagプロパティを使用すると便利です。例:あなたが表示されていないコントロールを設定した場合

For x = 1 to 10 
    Me.Controls("btnProj" & x).Visible = Me.Controls("btnProj" & x).Tag = Me.RequestStatus 
Next 

Dim ctl As Control 
For Each ctl In Me.Controls 
    If ctl.ControlType = acCommandButton Then 
     ctl.Visible = ctl.Tag = Me.RequestStatus 
    End If 
Next ctl 

別のアプローチは、その後のループがコントロールのセットに限定することができなどbtnProj1、btnProj2、同様に、コントロールに類似した名前を与えることですなぜEnabledプロパティに気をつけますか?

関連する問題