2012-05-22 96 views
0

我目前正在嘗試改進Access數據庫VBA,這是從我的前任工作中繼承的。我已經擺脫了特定的形式。多文本框和查找

我有一個表單,目前只是一個包含32個單獨的文本框的大表單,每個表單後面都有相同的代碼,但是它對於每個文本框重複使用相同的代碼,只更改每個文本框的引用。

Private Sub Cand_No2_AfterUpdate() 
Cand_Name2 = DLookup("[Name]", "[qryExamAbsences]", "[Cand_No] = Cand_No2") 
End Sub 

然後,一旦按下按鈕

If Not IsNull([Cand_Name1]) Then 
Rope = Rope & " Or Cand_No = " & [Cand_No1] 
End If 

(if語句包含在按鈕mousedown事件。)

發生的每個文本框,然後過濾報告是打印供辦公使用。這有很多問題,但我試圖解決的主要問題是條目數有上限,如果我需要過濾超過32個,我需要刪除文本並重新開始。

有沒有一種方法可以將所有這些組合到一段代碼中,以便在需要時創建文本框?

編輯。

我發現了一種給用戶留下印象的方式,即在每個條目從用戶立場改進了表單後(不再有32個文本框或不必向下滾動到打印按鈕。)但是這仍然沒有解決亂碼的問題,因爲我不得不重複每個盒子的額外代碼,這也使我仍然有最多32個條目。

新的代碼如下:

If Not IsNull(Cand_Name1.value) Then 
Cand_No2.Visible = True 
Cand_Name2.Visible = True 
cmdPrint.Top = 2500 
cmdPrint.Left = 2500 
DoCmd.MoveSize 1440, 2201, , 4000 
Else 
Cand_No2.Visible = False 
Cand_Name2.Visible = False 
cmdPrint.Top = 2000 
DoCmd.MoveSize 1440, 2201, , 3500 
End If 

本質使得下一個文本框可見上下移動打印按鈕以騰出空間給新的文本框中。它也擴大了窗口。

+0

我有點困惑,你想在你的代碼中做什麼。當用戶在文本框中完成輸入時,您將相匹配的Cand_No的名稱放入變量中,然後使用按鈕將數字逐個添加到稍後用於打印結果的查詢字符串中?如果我們對最終結果和投入有更多瞭解,可能會有更高效的方法來幫助您。 – StuckAtWork

+0

抱歉,沒有意識到我錯過了一些有用的東西。我對這種事情並不十分熟練,但卻被這項任務所困擾。 過程如下:用戶在文本框中輸入CAND_NO,然後用它查找cand_name並過濾打印的報告,以便只顯示輸入的報告。使用CAND_No的原因是由於另一個進程,並且CAND_Name查找仍然需要發生,因此用戶可以確保輸入正確的人員。CAND_Name會顯示在用戶輸入CAND_NO的文本框旁邊的文本框中 – KorgyBoy

+0

我的目標也是刪除表單中的一些瑕疵。目前,所有32個文本框都是可見的,它只是讓它看起來很亂,我也想改進表單背後的代碼,只是通常使其更有效。我繼承了一個數據庫,這個數據庫已經有10年的設計不佳了,他們不想離開它,所以我試圖改善它。 – KorgyBoy

回答

0

難道你不只是有2個文本框,一個用於CAND_NO,另一個用於CAND_NAME,然後在這兩個框旁邊放置一個ADD CAND_NO按鈕。

創建一個列表框,在按下添加按鈕後列出每個CAND_NO/CAND_NAME,以便他們可以看到他們到目前爲止添加的內容。然後循環遍歷列表框,以建立繩索字符串,或者讓繩索字符串或者是表單上的全局變量,然後在添加數字時構建它,或者將它們存儲在存儲值的隱藏文本框中,如果您不喜歡全球。

+0

我沒想到,謝謝。這當然是對現有系統的改進。 – KorgyBoy