我是Access VBA的新手,我的循环问题。
我已经审查过各种书籍,网站,询问各种朋友。目前我正在尝试让用户输入两个字符,然后如果两个字符等于某个组合,那么它应该等于一个数值,然后在距离计算中使用该值。
用户输入的值是字符串,其他所有内容都声明为double。
我有200多种组合,我正在测试并尝试过case
语句,DLookup
,do while
,do until
,if
和elseif
循环但没有成功。
我也受到IT的限制,我无法使用DAO代码。
任何帮助将不胜感激。
我首先建议创建一个表来正式定义各种字符组合以及每个组合的相应值。这具有以下优点:可以容易地保持组合向前,而不是将这样的组合定义为查询的一部分或VBA代码。
这样的表可以像包含三个字段一样简单:
然后,您可以使用有效组合填充此类表:
通过严格定义的组合,您可以选择多种方法来提示用户输入两个字符并获取相应的值。
一种非常简单的方法可能是使用具有三个文本框的表单:
这里,前两个文本框将是未绑定的,可能被称为char1
和char2
,第三个文本框可能被称为result
并且具有等于的控制源属性:
=DLookup("Value", "LookupTable", "char1 = '" & [char1] & "' and char2 = '" & [char2] & "'")
这会产生以下行为:
通过将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
您可以在结果表单按钮中或在两个文本框上的事件之后使用以下类型函数 - 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
万一