2016-12-15 322 views
0

我開始使用Access + SQL,因爲我必須將一些重要的Excel文檔轉移到訪問數據庫中,並且我仍然是這裏的新手。我試過的東西,你可以看到下面,但它不能正常工作,我覺得VBA是很容易...在Access中自動填充單元格

問題:我所試圖做到這一點,自動填寫一些細胞因用戶在前一個單元格中輸入。

情況:我有一個訪問數據庫中的表稱爲概述將由行由用戶填寫一行。我將主鍵設置爲ShipmentID,以便每當他啓動一個新行時,他必須首先輸入該值。

enter image description here

之後,當用戶進入DealerNo,我想要的3下一個信息(DealerName,鄉村,ShipperContact)中分別被填充。

來自其他房間的信息代理人查看其中列出了所有不同的經銷商,並收集他們所有的信息。

DealerLookup分別在列CompanyName,Country,ContactName列中包含這3個信息,而此表中的主鍵是DealerNo。

嘗試:雖然這根本不起作用,所以我希望你能幫助我解決問題。

INSERT INTO Overview (DealerName, Country, ShipperContact) 
WHERE DealerNo = 50535 
SELECT CompanyName , Country , ContactName FROM DealerLookupNew 
WHERE DealerNo = Overview.DealerNo ; 

備註:

  1. 即使它會工作,它不會是一個很好的解決方案,因爲這是有效的只有一個DealerNo。所以它只適用於那一行,但如果用戶輸入另一個DealerNo這個代碼不會做任何事......一個好的解決方案(我不知道如何在SQL中編寫)將替換50535與DealerNo中最後一個非空單元格的值。
  2. 如果我刪除WHERE DealerNo = 50535那麼錯誤來自於最後一行,因爲Overview.DealerNo不是說「採取DealerNo最後一個非空單元格的值形成概述表」
正道

任何想法如何做到這一點?

+0

我會寫和運行Excel宏導出到訪問前,填補了空白單元格。 –

+0

是的,但事情是,這個訪問將被更新(新的行進入或刪除)每天。目前的數據是在Excel中,但因爲它是一個非常沉重的文件就可以使每個操作很慢,這就是爲什麼我想轉讓獲取了整個事情,避免出口幾次 – Seb

回答

1

看起來你正試圖在數據表視圖中做到這一點。您需要的是AfterUpdate事件,在數據表視圖中不可用。

我非常確定要做到這一點的唯一方法是將字段添加到窗體並在DealerNo的AfterUpdate事件中執行計算。它將改變用戶輸入數據的方式,但與標準的數據表視圖相比,它可以爲操作數據提供更多的靈活性。

或者,如Dan在評論中所建議的,只需在導入Excel之前完成所有工作即可。但是,一旦所有數據都在Access中並且您正在輸入新記錄,這將無助於您繼續前進。

+0

謝謝您的回答約翰尼,我將開始尋找在窗體,然後自我試圖避免它們到目前爲止,並會通知您 – Seb

+0

您是否知道將表單鏈接到表的方法,以便AfterUpdate事件在用戶輸入DealerNo時運行? – Seb

+1

如果您指定一個表格作爲表單的RecordSource,那麼在輸入數據時該表格會自動更新。對於初學者來說這很好,但如果您將表單解除綁定(不指定任何RecordSource),則您在保存記錄的方式和時間方面具有更多的靈活性。無論哪種方式,你可以在DealerNo的文本框的AfterUpdate事件中使用DLookup來填充其他文本框。因此,一條線是:Me.txtCompanyName =使用DLookup( 「公司名稱」, 「DealerLookupNew」, 「DealerNo = '」 &Me.txtDealerNo& 「'」) –