使用Access 2010.对自动化和宏来说相当新。
我有两个表格(tblProductReceived
和tblBins
)和一个表单(frmProductReceived
)。
tblBins
中的字段对应于bin所在的位置(名为BinLocationID
),tblProductReceived
表跟踪特定bin已收到的产品。
我需要的是tblProductReceived
字段PRLocationID
([tblProductReceived].[PRLocationID]
)在选择特定bin时自动填充bin所在的位置([tblBins].[BinLocationID]
)表格(frmProductReceived
)。
我能做到这一点吗?我是macros / vba的新手,我非常感谢一些提示/建议!
此外,PRLocationID
字段的表单中没有对象。我希望根据用户选择的bin编号字段([tbl.Bins].[BinID]
)
以下是tblBins,tblProductReceived和frmProductReceived的图像:http://imgur.com/a/0IUHm/(无法在没有声望的情况下发布图像)
看到这是我的结构:
tblProductReceived是一个记录存放在垃圾箱中的项目的表。
tblBins是包含字段BinLocationID的物理放置位置(bin)的列表
BinLocationID实际上对应于具有所有位置的另一个表(tblLocations)。
但是我不能简单地将字段从tblBins链接到tblProductReceived,因为迟早的垃圾箱可以从一个位置移动到另一个位置(无论什么原因是不重要的)。这就是为什么我需要将[tblBins]。[BinLocationID]的副本复制到[tblProductReceived]。[PRLocationID]因为如果bin移动,它会弄乱任何分析(因为我们想要跟踪哪里产品不仅在垃圾箱的位置下降了。
此外,我设置的表单确实有下拉到各个bin([tblProductReceived]中的[PRBinID] - (我在tblBins上使用查询查询)但请记住,PRLocationID中没有txtBox因为它是多余的。这些垃圾箱已经到位,所有我需要的是它被复制到适当的表格。
我能忽视什么吗?
答案 0 :(得分:0)
经过几个小时的挑选后,这是我提出的最优雅的解决方案:
在表单上,我有一个名为txtPRLocationID的隐藏txtBox,其行源为PRLocationID(在tblLocations中)
在txtPRBinID选择了一个bin后,我有一个在Lose Focus编写的事件:
'Private Sub txtPRBinID_LostFocus()'
'[txtPRLocationID].Value = DLookup("[BinLocationID]", "tblBins", "BinID = " & Nz(Me!txtPRBinID.Value, 1))'
'End Sub'
基本上它的作用是每次为txtPRBinID选择一个值并且用户继续(丢失txtBox的焦点)时,对于BinID的值,tblBins.BinLocationID发生DLookup并更改txtPRLocationID文本框的值。
Nz()'是为了避免Null错误(根据谷歌搜索)。不确定是否有必要,如果有人可以确认,请做!
感谢阅读!