Access VBA中的循环

问题描述 投票:1回答:3

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

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

用户输入的值是字符串,其他所有内容都声明为double。

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

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

任何帮助将不胜感激。

vba loops ms-access access-vba
3个回答
1
投票

我首先建议创建一个表来正式定义各种字符组合以及每个组合的相应值。这具有以下优点:可以容易地保持组合向前,而不是将这样的组合定义为查询的一部分或VBA代码。

这样的表可以像包含三个字段一样简单:

  • 人物1(文字)
  • 人物2(文字)
  • 价值(数量)

enter image description here

然后,您可以使用有效组合填充此类表:

enter image description here

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

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

enter image description here

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

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

这会产生以下行为:

enter image description here


0
投票

通过将200多种组合存储在具有相应数值的表中,考虑将Access用作数据库和GUI应用程序。然后按用户输入过滤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

0
投票

您可以在结果表单按钮中或在两个文本框上的事件之后使用以下类型函数 - Dim resultValue as Integer如果DCount(“numeric_value”,“tblCombinations”,“[combn1] ='”&Forms!myForm!myUserInputField1&“'和[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

万一

© www.soinside.com 2019 - 2024. All rights reserved.