Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 如何灰显Access组合框中的项目。_Ms Access_Vba_Ms Access 2013 - Fatal编程技术网

Ms access 如何灰显Access组合框中的项目。

Ms access 如何灰显Access组合框中的项目。,ms-access,vba,ms-access-2013,Ms Access,Vba,Ms Access 2013,我目前正在尝试在Access中对组合框进行一些锁定,我不确定是否可以。表单的流程是,用户将选择一个零件,然后选择一个区域,然后选择一个工艺组。之后,将有一个流程步骤中的项目列表。工艺组的选择基于选择的零件和区域。流程步骤基于选择的流程组。 我想要实现的是,用户必须按时间顺序浏览列表。在前面的步骤完成之前,有些步骤不应该开始。当前,当用户完成一个步骤时,他们将单击一个按钮运行更新查询,将该步骤的comp_count状态从0更改为1。 我不确定是否可以使用comp_计数进行锁定,如果可以,如何使

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

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


我不确定是否可以使用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语句。这不是最优雅的解决方案,但它可以满足我的所有需求