Ms access 完成某些字段后,使字段在MS Access窗体中可见
我正在MS Access中构建一个表单,供用户输入数据,但可能的字段太多了。大多数情况下,只有大约一半的字段将被使用 因此,我希望某些字段仅根据用户在先前给定字段上输入的内容显示 例如:用户输入项目编号、标题,然后检查“是/否”工程。由于他检查了它,这意味着工程受到了影响,因此出现了十几个用户必须填写的字段 这是否可能: 1) 无VBAMs access 完成某些字段后,使字段在MS Access窗体中可见,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我正在MS Access中构建一个表单,供用户输入数据,但可能的字段太多了。大多数情况下,只有大约一半的字段将被使用 因此,我希望某些字段仅根据用户在先前给定字段上输入的内容显示 例如:用户输入项目编号、标题,然后检查“是/否”工程。由于他检查了它,这意味着工程受到了影响,因此出现了十几个用户必须填写的字段 这是否可能: 1) 无VBA 2) 如果没有VBA,使用VBA可能是不可能的 以VBA为例: 确保窗体处于“设计”视图中 右键单击组合框,生成事件,代码生成器 这将打开表单后面的代码。它会将
2) 如果没有VBA,使用VBA可能是不可能的 以VBA为例:
BeforeUpdate
事件的默认代码中。我们需要的是Change
事件,因此在右上角将下拉列表从BeforeUpdate
更改为Change
。这将为您提供如下代码:
Private Sub Field1_Change()
End Sub
在这里,您需要检查组合框的值并根据需要隐藏字段:
假设组合框的名称为Field1(当然,您的名称会有所不同),则添加一些代码,以便隐藏Field2:
Private Sub Field1_Change()
If Field1.Value = "Yes" Then
Me.Field2.Visible = False
End If
End Sub
注意,您需要知道所有字段的名称-这是在属性框(F4)中的“名称”字段的另一个选项卡中。您应该为所有字段提供合理的名称,以便了解代码中发生了什么
对于复选框,请遵循完全相同的过程,但可能需要使用单击事件。只是实验
示例复选框代码:
Private Sub Check5_Click()
' Note: vbTrue = -1
If Me.Check5 = vbTrue Then
MsgBox ("Ticked")
Else
MsgBox ("Not Ticked")
End If
End Sub
有一种方法可以在没有VBA的情况下做到这一点。不过我还是推荐VBA,因为你可以用它做更多的事情
与其隐藏,不如尝试通过表达式禁用具有条件格式的不必要字段
右键单击要禁用的控件。
向下点击“条件格式”
添加新规则
选择“表达式为”
例如:
[fld1]=“是”
打残疾人箱
单击“确定”
单击“确定”
现在,如果字段1选择了“是”,您选择的控件将禁用。我也有同样的问题,我执行了以下操作:
Private Sub Field1_Click()
If Field1 = "Yes" Then
Me.Field2.Visible = True
Else: Me.Field2.Visible = False
End If
End Sub
但现在我有另一个问题,当我更改记录时,我选择在最后一条记录中可见的字段现在在当前记录中可见,尽管我没有选择任何选项
谢谢,我有一个表单,在选择列表框值后,它将显示某些字段。我使用AfterUpdate功能。到目前为止,它已经奏效了。我的代码如下。ProjectName和ProjectNumber是仅在选择“工程”时才显示的字段。OtherName和OtherNumber是仅在“NotEngineering”项目中显示的字段
通过单击选择项目类型的字段插入此代码,转到属性页上的“事件”选项卡,然后单击“更新后”,选择“代码生成器”并粘贴到VBA中
Private Sub ProjectType_AfterUpdate()
If ProjectType.Value = "Engineering" Then
Me.ProjectName.Visible = True
Me.ProjectNumber.Visible = True
Else
Me.ProjectName.Visible = False
Me.ProjectNumber.Visible = False
End If
If ProjectType.Value = "NotEngineering" Then
Me.OtherName.Visible = True
Me.OtherNumber.Visible = True
Else
Me.OtherName.Visible = False
Me.OtherNumber.Visible = False
End If
End Sub
如果很多字段在大多数时候都不相关,那么这听起来像是一个糟糕的DB结构设计。考虑把它分解成多个逻辑子窗体或弹出形式。代码在if语句始终为false时运行。所以我在一个文本框“If WeightImpact.Value=0 Then”上尝试了相同的代码,结果成功了。你知道为什么这个复选框不起作用吗?正如我所说,它运行,但if语句总是变为false。在VBA编辑器中,单击边距,直到代码上出现一个红色/栗色条。这是一个断点。现在单击表单上的复选框,它应该会在代码中中断。现在将鼠标悬停在控件的值上,找出它是什么。布尔控件通常是-1
,因为它是答案还是问题?回答您的问题。。。都是!:P