2011-03-17 64 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