如何使Access组合框中的项目变灰。

时间:2016-01-03 16:13:50

标签: ms-access access-vba ms-access-2013

我目前正试图在Access中对组合框进行一些锁定,我不确定是否可以。表单的流程是用户将选择一个部件,然后选择区域,然后选择一个进程组。之后,流程步骤中将有一个项目列表。过程组选择基于选择的部件和区域。流程步骤基于选择的流程组。 Process steps selection

我想要达到的目的是让用户按时间顺序浏览列表。在完成上一个步骤之前,有些步骤不应该开始。目前,当用户完成一个步骤时,他们将单击一个运行更新查询的按钮,将该步骤的comp_count状态从0更改为1。 Process Status Table

我不确定我是否可以使用comp_count进行锁定,如果可以的话,我怎么能这样做才能使列表中的第一项始终可选。另外我更喜欢下拉列表中的所有项目都可见,但是那些不可用的项目是灰色的。

2 个答案:

答案 0 :(得分:0)

您无法将其灰显,但您可以告诉用户不要选择它:

Private Sub myCombo_BeforeUpdate(Cancel As Integer)
If Not Me.myCombo.Column(1) Then
  MsgBox "Do not choose this one yet."
  Cancel = True
End If

答案 1 :(得分:0)

我最终找到了一个非常优雅的解决方案,但它确实有效。我在流程状态表中添加了一个名为“Check”的列,默认值为0.然后,我创建了一个查询,该查询将更改具有顺序值1的任何进程的该字段的值。 然后我创建了两个查询来比较“Comp_Count”和“Check”。然后我为我的选择创建了一个更新后事件。

Private Sub Sel_Process_AfterUpdate()
If DCount("*", "qry_process_step_check") = DCount("*", "qry_process_step_check_count") Then
Update_All_Forms
Else
MsgBox ("Previous step/steps not done.")
End If
End Sub

然后我创建了一系列查询,它们执行类似于我用于流程步骤选择的检查功能。 Check Query 2 除了那些查询,我还创建了一个更新查询。  Update Query

这是非优雅部分的来源。我为每个查询制作了16份副本,并更改​​了每个查询的序列号。完成此操作后,我更改了on click事件以获取一个按钮,该按钮将更新Process_Status表中的“Comp_Count”字段。 以下是使用的代码示例。

Private Sub Refresh_Sign_Offs_Button_Click()
If DCount("*", "qry_verifications_check_count") = DCount("*", "qry_verifications_check") And DCount("*", "qry_sub_verif_check_count") = DCount("*", "qry_Sub_Verif_check") And DCount("*", "qry_measurements_check_count") = DCount("*", "qry_measurements_check") And DCount("*", "qry_equipment_check_count") = DCount("*", "qry_equipment_check") And DCount("*", "qry_kits_check_count") = DCount("*", "qry_kits_check") And DCount("*", "qry_material_check_count") = DCount("*", "qry_material_check") Then
 Me.Completed.Visible = True
 DoCmd.SetWarnings False
 DoCmd.OpenQuery ("qry_update_process_status")
 DoCmd.SetWarnings True
MsgBox ("Process has been completed.")
If DCount("*", "qry_seq1check") = DCount("*", "qry_seq1count") Then
    DoCmd.SetWarnings False
    DoCmd.OpenQuery ("qry_seq1u")
    DoCmd.SetWarnings True


ElseIf DCount("*", "qry_seq2check") = DCount("*", "qry_seq2count") Then
    DoCmd.SetWarnings False
    DoCmd.OpenQuery ("qry_seq2u")
    DoCmd.SetWarnings True
Else
  Me.Completed.Visible = False
  MsgBox ("Not all items filled out.")
End If

上面代码中唯一缺少的是我正在使用的其余elseif语句。这不是最优雅的解决方案,但它会做我需要做的一切。