访问子表单和引用

时间:2012-12-20 06:51:08

标签: vba ms-access access-vba

为什么此代码没有运行。我想为Mininimum (MIN_STOCK)的药物返回Maximum (Stock MAX_STOCK1)>quantity以及QTY_IHND1手中(COMM_NUM)

If DCount(QTY_IHND1, "Stores_Table") = 0 Then
    QTY_IHND1 = 0

ElseIf DCount(QTY_IHND1, "Stores_Table") > 1 Then
     QTY_IHND1 = DLast("QTY_IHND1", "Stores_Table", "COMM_NUM = [COMM_NUM]") _
          + ((SubStoresTable.Form!QTY_RECVD) - (SubStoresTable.Form!QTY_ISSUE))
Else
     QTY_IHND1 = 0
End If

Forms!Pharmacytally.Controls("QTY_IHND1").Value = QTY_IHND1
MAX_STOCK1 = DMin("QTY_IHND1", "Stores_Table", "COMM_NUM" = [COMM_NUM])
Forms!Pharmacytally.Controls("MAX_STOCK1").Value = MAX_STOCK1
MIN_STOCK1 = DMin("QTY_IHND1", "Stores_Table", "COMM_NUM" = [COMM_NUM])
Forms!Pharmacytally.Controls("MIN_STOCK1").Value = MIN_STOCK1

1 个答案:

答案 0 :(得分:0)

我不知道标题中的子表单部分会出现在您的问题中。 MVP网站here中有一篇文章。

你在错误的地方等于。

 MAX_STOCK1 = DMin("QTY_IHND1", "Stores_Table", "COMM_NUM =" & [COMM_NUM])

COMM_NUM必须是数字,否则您需要引号。

整个代码部分不好,可以做返工。例如:

DCount(QTY_IHND1, "Stores_Table")

这似乎是一个相当奇怪的检查商店表是否完全为空,同样,QTY_IHND1没有被引用。

DLast("QTY_IHND1", "Stores_Table", "COMM_NUM = [COMM_NUM]"

Comm_Num始终与自己相等。

此外,您有很多查找,使用记录集会更好。

然后是最后一件事。除了在单个用户系统中,最后一个获取值的方法非常糟糕,即便如此,您应该考虑它可能不是单个用户。

无需引用控件属性来获取控件:

Forms!Pharmacytally.Controls("QTY_IHND1")

控件成为表单的属性:

Forms!Pharmacytally.QTY_IHND1

或者

Forms!Pharmacytally!QTY_IHND1

或者如果代码在Pharmacytally表单上运行,

Me.QTY_IHND1

这将允许您利用intellisense。

编辑重新评论

使用主窗体和名为MySubformControl的子窗体控件

 MyQty = Me.MySubformControl.Form.QTY_RECVD

重要的是要注意MySubformControl是子窗体控件的名称,而不是包含的窗体。