2013-12-18 49 views
2

我正在構建窗體在MS Access中,用戶可以輸入數據但有太多可能的字段。大部分時間只有大約一半的田地將被使用。使字段在MS Access窗體中可見,因爲某些字段已完成

因此,我希望僅根據用戶在先前給定的字段上輸入的內容來顯示某些字段。例如:用戶輸入項目編號,標題,然後他檢查「是/否」工程。因爲他檢查了它,這意味着工程將受到影響,因此會出現十幾個用戶必須填寫的字段。

這是可能的:

1)沒有VBA

2)用VBA

+3

如果很多字段在大多數情況下都不相關,那麼這就像一個糟糕的數據庫結構設計。考慮將其分解爲多個邏輯子表單或彈出窗體。 – JohnFx

回答

1

也許不可能沒有VBA。

用VBA例如:

  1. 確保您的形式是在您的組合框設計視圖
  2. 點擊右鍵,事件生成,代碼生成

這將打開您的形式背後的代碼。它會將您下載到BeforeUpdate事件的默認代碼中。我們想要Change事件,所以在右上角將下拉從BeforeUpdate更改爲Change。這會給你這樣的一些代碼:

Private Sub Field1_Change() 

End Sub 

這裏面,要檢查組合框的值和隱藏字段要求:

假設您的組合框的名稱是field (當然你的將是不同的),你添加一些代碼,以便它看起來像這樣隱藏字段2:

Private Sub Field1_Change() 
    If Field1.Value = "Yes" Then 
     Me.Field2.Visible = False 
    End If 
End Sub 

注意你需要知道的所有字段的名稱 - 這是在其他選項卡,Name字段在屬性框(F4)中。你應該給你所有的領域明智的名字,這樣你就可以理解代碼中發生了什麼。

對於複選框,請遵循完全相同的過程,但您可能需要使用Click事件。只是試驗。

樣品複選框代碼:

Private Sub Check5_Click() 
    ' Note: vbTrue = -1 
    If Me.Check5 = vbTrue Then 
    MsgBox ("Ticked") 
    Else 
MsgBox ("Not Ticked") 
    End If 
End Sub 
+0

這一開始並不奏效。代碼運行dut if語句總是爲false。所以我嘗試了相同的代碼在文本框「如果WeightImpact.Value = 0然後」它的工作。任何想法爲什麼它不在複選框上工作?正如我所說,它運行,但if語句總是假的。 – user2385809

+0

在您的VBA編輯器中,單擊邊距,直到代碼中出現紅色/栗色的條形。這是一個斷點。現在點擊您的表單上的複選框,它應該打破代碼。現在將鼠標懸停在您的控件的值上並找出它的內容。布爾控件通常爲'-1'爲真 –

+0

只需爲您添加更多的代碼框代碼。 –

0

有辦法做到不-相當,這一點沒有VBA。儘管如此,我一定會推薦VBA,因爲你可以做更多的事情。

而不是隱藏,請嘗試通過條件格式化按表達式禁用不必要的字段。

右鍵單擊要禁用的控件。 下去,然後單擊「條件格式」 添加新的規則 選擇「表達爲」

例如: [FLD1] =「是」

打殘疾人箱 單擊確定 單擊確定

現在如果字段1選擇了「是」,您選擇的控件將被禁用。

0

我有同樣的問題,我做了以下內容:

Private Sub Field1_Click() 
If Field1 = "Yes" Then 
Me.Field2.Visible = True 
Else: Me.Field2.Visible = False 
End If 
End Sub 

但是現在我有其他的問題,當我改變的記錄,我choosen場是在最後一個記錄可見的是現在可見目前的紀錄,雖然我沒有選擇任何選項。

謝謝

+0

這是一個答案或問題? –

+0

回答你的問題......兩個! :P – CandleJack

0

我有一個表格中選擇一個列表框的值後,將顯示某些字段。我使用AfterUpdate功能。到目前爲止它已經工作。我的代碼如下。 ProjectName和ProjectNumber是隻有在選擇了Engineering時才顯示的字段。如果它是「NotEngineering」項目,則只需顯示OtherName和OtherNumber。

通過單擊選擇項目類型的字段插入此代碼,轉到屬性頁上的「事件」選項卡,然後單擊「更新後」,然後選擇代碼構建器並粘貼到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 
相關問題