2011-03-17 83 views
0

我只有一个表,我想为用户创建一个窗体来轻松地填充表。表格中至少有5个字段,只有在从下拉列表中选择某种类型的检查(火灾)时才需要填写,否则将保留空白。在Access 2003中的窗体和子窗体

我想创建一个子窗体,只有在主窗体的下拉列表中选择检查类型“Fire”时才会弹出。我怎样才能做到这一点?

我用向导来创建表单,而我被卡住了,因为我真的不知道VBA。到目前为止,我去了检查类型表格上的字段,点击“属性”,然后点击“更新后”,然后选择我创建的宏来打开子表格,当inspection type =“Fire”,但它不起作用。

无论选择何种类型的检查,子窗体都会被打开,然后子窗体上的ID号与主窗体不匹配(子窗体ID将保留在ID#1上)。另外,当我在子窗体中输入数据时,信息在下一个记录中结束。

我想知道是否发生这种情况,因为我使用窗体和子窗体将数据输入到同一个表中。我希望这是对我想要做的事情的明确解释。

回答

0

只是更改此代码,以适应您的需求,并把它添加到检验类型文本框的Change事件:

Sub InspectionType_Change 
    if InspectionType.Text="Fire" Then 
    Subform1.Visible=True 
    else 
    Subform1.Visible=False 
    endif 
End Sub 
+0

谢谢你帮我解决这个问题。代码很好,工作正常。现在我只需要弄清楚在用户输入最后一个项目后如何使子窗体消失。再次感谢 – jen 2011-03-18 16:49:12

+0

为什么CHANGE事件代替AfterUpdate? – 2011-03-19 20:29:26

0

如果字段是同一个表,然后我会建议将在该领域子表单到主表单上。然后根据组合框的状态使它们可见或不可见。

使用子窗体会变得更复杂一点,因为在打开子窗体之前,您需要将主窗体中的记录保存起来。否则,子表单将无法更新记录,并会给你一个锁定消息。

+0

谢谢你帮我解决这个问题。我也用下列方式你的方法: – jen 2011-03-18 16:49:52

+0

'如果我txtControl1 = “火” then' '我txtControl2.Visible = TRUE; 'Else' '我txtControl2.Visible = FALSE' 结束如果 – jen 2011-03-18 16:52:58

+0

!!是的,这是代码。 – 2011-03-18 20:06:24

1

只是为了尝试提高Kovags出色的命题了一下:

Sub InspectionType_AfterUpdate 
    Subform1.Visible=(InspectionType.Text="Fire") 
End Sub 

Sub Form_Current 
    InspectionType_AfterUpdate 
End Sub 
+0

谢谢你的帮助。您的代码也运行良好,但现在我必须弄清楚如何在最后一次输入后关闭子表单,并确保输入的信息已保存。 – jen 2011-03-18 16:54:23

+0

在Access中,退出记录时会自动保存一条记录。 – 2011-03-18 20:54:04

+0

如果你真的想要强迫它,请使用If Me.Dirty Then Me.Dirty = False – 2011-03-18 20:54:50

相关问题