【问题标题】:Textbox DLookup value sometimes missing文本框 DLookup 值有时会丢失
【发布时间】:2016-03-08 05:39:22
【问题描述】:

我有一个包含 18 个未绑定文本框的表单,这些文本框可以提取值。 他们通常有 90% 的时间都在工作。有时一个值没有出现,我可以修复它的唯一方法是关闭数据库并再次打开它。

每次记录更改时需要刷新 9 个文本框

这是 9 个卡住的文本框中的 2 个的示例:

'txtAFP_Sum
=IIf(IsError([sfm_COB_DISTR].[Form]![totAFP]),"-",[sfm_COB_DISTR]![totAFP])
'txtALLOT_Sum
=IIf(IsError([sfm_COB_DISTR].[Form]![totALLOT]),"-",[sfm_COB_DISTR]![totALLOT])

其他 7 个有类似的公式。

9 其他未绑定的文本框不需要在每次查看记录时更改,因此为了尝试加快其中一些计算,我编写了一个例程,仅在必要时将 dLookups 分配给未绑定的文本框查看值的变化。

每次我更改需要查看所有框更新的值时,我都会调用以下例程:

    Public Sub RefreshTOTALS()

    PopUpMsg ("Refreshing Totals...")


    With Form_frm_COB

    'Entire COB
    .txtTOTALS_AFP = DLookup("AFP", "TOTALS_FINAL")
    .txtTOTALS_ALLT = DLookup("ALLT", "TOTALS_FINAL")
    .txtTOTALS_SP_C = DLookup("SP_C", "TOTALS_FINAL")
    .txtTOTALS_SP_O = DLookup("SP_O", "TOTALS_FINAL")
    .txtTOTALS_COMMITS = DLookup("COMMITS", "TOTALS_FINAL")
    .txtTOTALS_OBS = DLookup("OBS", "TOTALS_FINAL")
    .txtTOTALS_COM_SP_RATE = DLookup("COM_SP_RATE", "TOTALS_FINAL")
    .txtTOTALS_OBS_SP_RATE = DLookup("OBS_SP_RATE", "TOTALS_FINAL")
    .txtTOTALS_UNC = DLookup("UNC", "TOTALS_FINAL")

    'Current COB ID
.txtAFP_Sum.Requery
.txtALLOT_Sum.Requery    
.txtSP_C.Requery
    .txtSP_O.Requery
    .txtCOMS.Requery
    .txtOBLG.Requery
    .txtSPRate.Requery
    .txtOBSRate.Requery
    .txtWBS_Remain.Requery
    End With

    End Sub

我希望我能解决导致值无法计算的原因。

【问题讨论】:

  • totAFPtotALLOT是什么数据类型? IsError() 用于数值表达式,但您将 IIF() 的真实场景设置为字符串。也许这会干扰IIF() 声明?
  • 是的。我希望得到那种类型的答案——数据类型是货币。所以它是 "-" 。如何获得与 Excel 在显示“-”代替 0 时相同的效果?
  • TextBox [sfm_COB_DISTR].[Form]![totAFP] 似乎在子表单上。如果子表单包含多条记录,那么这将只显示当前记录的totAFP。这是你所期待的吗?
  • 没有。 “totAFP”位于 sfm_COB_DISTR 的页脚并包含公式 Sum([AFP])
  • @monty327 取决于您要避免的错误(我假设是Null?)然后您可以使用IsNull 而不是IsError 来显示连字符。 @Olivier 发现了一个错误,尽管这更有可能是您遇到问题的原因。 (抱歉,错过了您的其他评论,但我认为您仍然需要致电 .Form,就像您之前在 IIF 声明中所做的那样)

标签: ms-access vba


【解决方案1】:

在以下表达式中,IIf 的 else-case 中缺少 .[Form] 部分:

错误:

'txtAFP_Sum
=IIf(IsError([sfm_COB_DISTR].[Form]![totAFP]),"-",[sfm_COB_DISTR]![totAFP])
'txtALLOT_Sum
=IIf(IsError([sfm_COB_DISTR].[Form]![totALLOT]),"-",[sfm_COB_DISTR]![totALLOT])

更正:

'txtAFP_Sum                                                      vvvvvvv
=IIf(IsError([sfm_COB_DISTR].[Form]![totAFP]),"-",[sfm_COB_DISTR].[Form]![totAFP])
'txtALLOT_Sum                                                      vvvvvvv
=IIf(IsError([sfm_COB_DISTR].[Form]![totALLOT]),"-",[sfm_COB_DISTR].[Form]![totALLOT])

【讨论】:

  • 优秀的捕获。但是,为什么计算会奏效呢?它不应该总是出错吗?
  • 如果sfm_COB_DISTR 是包含在当前表单中的子表单控件的名称,totAFP 是包含在该子表单控件中的表单中的文本框的名称,[sfm_COB_DISTR]![totAFP] 将为您提供文本框的.Value ...您不需要在这两个对象名称之间注入.Form
  • 所以我想我们还没有解决其他 10% 的时间,公式完全没有理由给我一个“-”,需要我重新启动表单?
猜你喜欢
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多