【问题标题】:Loops in Access VBAAccess VBA 中的循环
【发布时间】:2026-01-01 16:15:01
【问题描述】:

我是 Access VBA 的新手,但我的循环有问题。

我查看了各种书籍、网站,询问了各种朋友。目前我正在尝试让用户输入两个字符,然后如果这两个字符等于某个组合,那么它应该等于一个数值,然后在距离计算中使用该值。

用户输入的值是字符串,其他的都被声明为双精度。

我正在测试 200 多种组合,并尝试了 case 语句、DLookupdo whiledo untilifelseif 循环但没有成功。

我也受到 IT 的限制,无法使用 DAO 代码。

任何帮助将不胜感激。

【问题讨论】:

    标签: loops ms-access vba


    【解决方案1】:

    您可以在结果表单按钮或两个文本框上的事件后使用以下类型功能- 将 resultValue 调暗为整数 如果 DCount("numeric_value", "tblCombinations", "[combn1] = '" & Forms!myForm!myUserInputField1 & "' and [combn2] = '" & Forms!myForm!myUserInputField2 & "'") > 0 那么

      resultValue = Dlookup("numeric_value", "tblCombinations", "[combn1] = '" & Forms!myForm!myUserInputField1 & "' and [combn2] = '" & Forms!myForm!myUserInputField2 & "'")
    
       txtResult = Distance_Calculation(resultValue) 
    

    其他 Msgbox "不存在这样的组合。请检查组合", vbinformation, "信息"

      txtResult = 0
    

    如果结束

    【讨论】:

      【解决方案2】:

      考虑将 Access 用作数据库和 GUI 应用程序,将 200 多种组合存储在具有相应数值的表中。然后通过用户输入进行 SQL 查询过滤,并将结果值用于所需的计算。下面需要创建和使用四个Access objects:表、查询、表单和模块。

      表格 (tblCombinations)

       id  combn1  combn2  numeric_value
        1       A       B            150  
        2       C       D            225
        3       E       F            100 
        4       G       H             75
        5       I       J            200
      ...
      

      SQL (无需循环;使用 Access 表单控制值)

      SELECT c.combn1, c.combn2, c.numeric_value
      FROM tblCombinations c
      WHERE c.combn1 = Forms!myForm!myUserInputField1
        AND c.combn2 = Forms!myForm!myUserInputField2
      

      甚至在距离计算公式中传递所需的数值,该公式可以是标准模块中的 VBA 函数:

      SELECT c.combn1, c.combn2, Distance_Calculation(c.numeric_value) As distance_result
      FROM tblCombinations c
      WHERE c.combn1 = Forms!myForm!myUserInputField1
        AND c.combn2 = Forms!myForm!myUserInputField2
      

      VBA (放在标准模块中)

      Public Function Distance_Calculation(num_value As Long) As Double
         ...
         Distance_Calculation = some_value 
      End Function
      

      【讨论】:

      • 感谢大家的帮助。这一直让我发疯,让我的头发变白。不幸的是,我仍然无法获得数值结果。我想这个周末我会染头发
      【解决方案3】:

      我首先建议创建一个表格来正式定义各种字符组合以及每个组合的对应值。这样做的好处是可以很容易地维护这些组合,而不是将这些组合定义为查询的一部分或在 VBA 代码中。

      这样的表可以很简单,只包含三个字段:

      • 字符 1(文本)
      • 字符 2(文本)
      • 值(数字)

      然后您可以使用您的有效组合填充这样的表格:

      通过严格定义组合,您可以选择多种方式提示用户输入两个字符并获取对应的值。

      一种非常简单的方法可能是使用具有三个文本框的表单:

      这里,前两个文本框是未绑定的,可能被称为char1char2,第三个文本框可能被称为result,并且有一个控制源属性等于:

      =DLookup("Value", "LookupTable", "char1 = '" & [char1] & "' and char2 = '" & [char2] & "'")
      

      这将产生以下行为:

      【讨论】:

      • 你也没有使用任何 DAO 记录集! (我认为这是一种束缚你的尝试,使用 dlookup() 代替 DAO reocrdset 对你来说是最出色的!
      • 嗨,李。谢谢你为我做的一切!不过我有一个小问题。我就像你说的 Yoda 一样输入了所有内容,但由于某种原因它无法正常工作。我收到#Name 错误?你对如何解决它有什么建议吗?再次感谢您的所有帮助。我真的很感激。
      • @Divingmickey 不客气。我假设#Name 出现在结果文本框中?如果是这样,另外两个文本框是否命名为 char1char2
      • 是的,#Name?错误在文本框中。我有 char1 = StartNode 和 char2 = EndNode,它们都是字符串。时间是我其他精彩数字的两倍,我的表被命名为节点。我做错了什么尤达?
      • 您的字段是命名为StartNodeEndNode 还是您的文本框?或两者?您是否适当地更改了 DLookup 表达式的所有元素,包括 Value 字段名称?