Ms access 如何灰显Access组合框中的项目。
我目前正在尝试在Access中对组合框进行一些锁定,我不确定是否可以。表单的流程是,用户将选择一个零件,然后选择一个区域,然后选择一个工艺组。之后,将有一个流程步骤中的项目列表。工艺组的选择基于选择的零件和区域。流程步骤基于选择的流程组。 我想要实现的是,用户必须按时间顺序浏览列表。在前面的步骤完成之前,有些步骤不应该开始。当前,当用户完成一个步骤时,他们将单击一个按钮运行更新查询,将该步骤的comp_count状态从0更改为1。Ms access 如何灰显Access组合框中的项目。,ms-access,vba,ms-access-2013,Ms Access,Vba,Ms Access 2013,我目前正在尝试在Access中对组合框进行一些锁定,我不确定是否可以。表单的流程是,用户将选择一个零件,然后选择一个区域,然后选择一个工艺组。之后,将有一个流程步骤中的项目列表。工艺组的选择基于选择的零件和区域。流程步骤基于选择的流程组。 我想要实现的是,用户必须按时间顺序浏览列表。在前面的步骤完成之前,有些步骤不应该开始。当前,当用户完成一个步骤时,他们将单击一个按钮运行更新查询,将该步骤的comp_count状态从0更改为1。 我不确定是否可以使用comp_计数进行锁定,如果可以,如何使
我不确定是否可以使用comp_计数进行锁定,如果可以,如何使列表中的第一项始终是可选择的。此外,我更希望下拉列表中的所有项目都可见,但不可用的项目将灰显 您不能将其灰显,但可以告诉用户不要选择它:
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
我最终找到了一个不优雅的解决方案,但它是有效的。我在进程状态表中添加了一个名为“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
然后,我创建了一系列查询,这些查询执行了类似于我用于流程步骤选择的检查功能。
除了这些查询之外,我还创建了一个更新查询。
这就是非优雅部分的由来。我将每个查询复制了16份,并更改了每个查询的序号。完成后,我更改了按钮的点击事件,该按钮将更新进程状态表中的“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语句。这不是最优雅的解决方案,但它可以满足我的所有需求