Dlookup作为导航子窗体中文本框的控件来源

时间:2018-06-15 19:03:44

标签: database vba ms-access access-vba

我已经找到了答案,我已经在各种各样的变量,引号,表格参考,我能想到的所有内容中进行了改进,以使这个DLookup工作。以下是我在这里尝试做的事情的背景信息:

PrimaryRouteID =短文本数据(此查找中的关键人物)

SignSumtxt& SqFtSumtxt =我希望我的DLookup值显示的文本框(通过更改VBA中的控件源)

PrimaryRoadInventoryTotals =具有我想要的相关信息的查询

PrimaryRoadInventoryMaster =嵌套在导航表单中的表单(要使用的主表单)

其余的我将在此解释:我正在设计一个DLookup函数,该函数使用从嵌套在导航表单中的表单上的文本框中获取的PrimaryRouteID在PrimaryRoad InventoryTotals查询中查找数量。这个DLookup本身就在表单中运行,但是我一直在努力修复它以在Navigation表单中工作。

我的理解是,由于我已将MasterForm放入NavForm,它现在嵌套在NavSubform中,您必须引用NavSubform中的值,而不仅仅是您正在工作的表单in。我似乎已经找到了正确的语法(我认为)来获取我想要的值,但我的DLookup仍然没有像它需要的那样运行。在下面的版本中,分配给它们的DLookup的两个文本框都有#Name?错误。我不能为我的生活弄清楚该做什么!

代码(分开以便于查看):

Private Sub RouteSelectCombo_AfterUpdate()
SignSumtxt.ControlSource = DLookup("[TotalQuantity]", "[PrimaryRoadInventoryTotals]", "[PrimaryRoadInventoryTotals]![PrimaryRouteID] ='" & [Forms]![NavigationForm]![NavigationSubform].Form![PrimaryRouteIDtxt] & "'")

SqftSumtxt.ControlSource = DLookup("[TotalSqFt]", "[PrimaryRoadInventoryTotals]", "[PrimaryRoadInventoryTotals]![PrimaryRouteID] ='" & [Forms]![NavigationForm]![NavigationSubform].Form![PrimaryRouteIDtxt] & "'")
End Sub

我注意到的一个奇怪的事情,以及可能是这里错误的指示,是当我将这些代码嵌入到msgbox中时,它会读取" true"或"假。"不知道这是否有帮助,但我想提到它。

我很感激!

2 个答案:

答案 0 :(得分:0)

如果要为控件赋值,请使用.Value属性,而不是.ControlSource属性。 .ControlSource属性采用字符串控制源,如果您使用的是表达式,则应以=开头。

如果你真的想要分配控制源,你可以在开始时添加"=" &,但那是非常糟糕的设计。控制源不应该是可变的。

你应该做什么:

Private Sub RouteSelectCombo_AfterUpdate()
    SignSumtxt.Value= DLookup("[TotalQuantity]", "[PrimaryRoadInventoryTotals]", "[PrimaryRoadInventoryTotals]![PrimaryRouteID] ='" & [Forms]![NavigationForm]![NavigationSubform].Form![PrimaryRouteIDtxt] & "'")

    SqftSumtxt.Value= DLookup("[TotalSqFt]", "[PrimaryRoadInventoryTotals]", "[PrimaryRoadInventoryTotals]![PrimaryRouteID] ='" & [Forms]![NavigationForm]![NavigationSubform].Form![PrimaryRouteIDtxt] & "'")
End Sub

如果您确实想将其用作控制源:

Private Sub RouteSelectCombo_AfterUpdate()
    SignSumtxt.ControlSource = "=DLookup(""[TotalQuantity]"", ""[PrimaryRoadInventoryTotals]"", ""[PrimaryRoadInventoryTotals]![PrimaryRouteID] ='"" & [Forms]![NavigationForm]![NavigationSubform].Form![PrimaryRouteIDtxt] & ""'"")"

    SqftSumtxt.ControlSource = "=DLookup(""[TotalSqFt]"", ""[PrimaryRoadInventoryTotals]"", ""[PrimaryRoadInventoryTotals]![PrimaryRouteID] ='"" & [Forms]![NavigationForm]![NavigationSubform].Form![PrimaryRouteIDtxt] & ""'"")"
End Sub

答案 1 :(得分:0)

我想回到这个问题,并对这个话题做一些总结。虽然我在这里介绍的方法上没有成功(而且我确信我没有正确实现它们),但我还是坚持了简单的方法(根据罗伯特·哈维的建议),而不是强迫我认为是最好的方法来设置“导航”表单,而是仅创建一个包含按钮的表单,这些按钮会指向要使用的其他表单。

这样,我不必在导航表单引用内的表单内执行任何疯狂的子表单,并且我的导航表单上没有很多选项卡。

感谢大家的帮助和解答!