2013-07-25 45 views
1

我對Microsoft Access(第一次使用它)有點新,並且我想嘗試一下,考慮到它就像是Microsoft Excel和SQL的混搭服務器,我對後者非常熟悉。我想要做的是在插入一個新行後讓一個字段(例如Category)爲只讀字段。這個Category字段是查詢線索,並且數據宏將在創建時在具有該特定類別的對應子表中創建記錄。我不想在創建後更改它,因爲這會導致很多麻煩。Microsoft Access:在創建後創建一個只讀列

有什麼辦法可以在窗體中做到這一點?任何限制用戶的方式?或者有沒有解決方法?讓我知道,我會考慮所有選項,非常感謝你!

回答

1

使用窗體的當前事件。每次記錄成爲活動記錄時,該事件就會觸發。那時,如果當前記錄是「新」記錄,請啓用文本框。但是對於現有記錄,禁用文本框以防止用戶更改其存儲的值。

因此,如果文本框被命名爲txtFoo,你Form_Current過程可能是這樣的......

Private Sub Form_Current() 
    If Me.NewRecord = True Then 
     ' allow edit 
     Me.txtFoo.Enabled = True 
    Else 
     ' prevent edit 
     Me.txtFoo.Enabled = False 
    End If 
End Sub 

或者更簡潔同樣的事情...

Private Sub Form_Current() 
    Me.txtFoo.Enabled = Me.NewRecord 
End Sub 

除了Enabled屬性外,還應考慮Locked屬性。無論是單獨可以做你需要的。或者你可以使用兩者。測試各種組合,看看你更喜歡哪一種。

+0

酷,男人! VBA似乎非常方便,但這樣一個遙遠的夢想...... – matt

1

什麼是限制用戶訪問的最佳/最簡單的方式取決於您首先允許他們訪問的應用程序的哪些方面。

從你的情況和描述看來,你的宏實際上是在執行數據表的更新/操作,而你的用戶通過表單訪問這些數據?對於大多數應用程序來說,這是理想的技術,因爲您可以將整個表格顯示在窗體中,但在窗體的設計選項中,您可以自定義視圖並訪問用戶具有的功能。

如果您使用這種技術讓用戶通過表單訪問數據,則可以非常容易地限制用戶操作表中數據的能力,而無需使用任何VBA進行干預。如果您對Access的使用經驗有限,我認爲您可以使用可通過屬性菜單更改的表單選項修改此訪問權限。這也會阻止你修改你的表單來擁有「has模塊」屬性。

爲了使只讀您只需將

  1. 打開表單
  2. 開關進行控制,佈局視圖或設計視圖
  3. 打開屬性表(您可以在任何修改屬性)表單域(通過設計功能區中的屬性頁按鈕)
  4. 選擇要設置的字段只讀
  5. 在屬性頁的數據選項卡中有一個名爲「鎖定」的屬性。將此屬性切換爲「是」

這將使得用戶無法更改字段! (從這個表格)

選項二:

如果您想讓您的用戶只查看在普通數據表視圖(而不是一種形式)的表格,你可以讓他們通過它使用「OpenTable的」宏開(數據庫對象列表)並將數據模式設置爲「只讀」。重要提示:這會讓用戶無法編輯任何字段!如果您需要他們能夠編輯其他字段,則不能使用此選項。

HansUp的解決方案: 重要的是要注意(因爲你是新用戶) 要使用此VBA,你將需要在該表格的屬性表中的以下變化:

  1. 選擇「表格」作爲對象
  2. 改變「內含模塊」屬性(屬性表的其他選項卡上)「是」

而且我沒能找到一個簡單的方法來對錶Current屬性。另一種方法是使用「On Got Focus」(在「事件」選項卡中)通過他建議的VBA過程將該文本框的屬性設置爲「已禁用」。