这可能是一个基本的格式化问题,但出于某种原因,我无法找到解决问题的方法。我的方案是我想使用VBA从给定类别的表中的一个字段中找到最高数字(在同一个表中的另一个字段中标识)。我有大约八个类别,每个类别都有不同的数字(例如)
ATD 500
ATD 250
ATD 700
MLK 500
MLK 120
PTO 900
我认为最好的方法是使用DMAX函数,但由于某些原因,无论我如何编写它,我都会遇到语法错误。
到目前为止,我正在使用的代码是:
Dim HighestNumber As Variant
Dim HighCategory As Integer
HighCategory = InputBox("Please enter data", "ENTER", "ENTER")
HighestNumber = DMAX("[SaleValue]", "SalesTable", "[SalesCategory] = '" & HighCategory & "'")
(澄清一下,[SaleValue]和[SalesCategory]是访问表“SalesTable”中的两列,我正在尝试设置它,以便用户可以输入SalesCategory并获得该类别的最高SaleValue我希望能够将这个值存储在某处以备后用。)
每当我运行它时,我在最后一行遇到运行时错误“5”,无效的过程调用。我很确定这是一个语法错误,但我不能说出原因或故事。我试着读这个网站:
https://msdn.microsoft.com/VBA/Access-VBA/articles/application-dmax-method-access
但他们专注于硬编码标准,我无法找到如何使用DMax的好例子,其中标准应由用户指定。
感谢您提供的任何帮助!
编辑:如下更改代码会产生相同的错误
Dim HighestNumber As Long
Dim HighCategory As String
HighCategory = InputBox("Please enter data", "ENTER", "ENTER")
HighestNumber = DMAX("[SaleValue]", "SalesTable", "[SalesCategory] = '" & HighCategory & "'")
答案 0 :(得分:1)
你已经指定HighCategory是一个整数,但这应该是一个字符串或一个变体,这不是“ATD”等?另外,你的HighValue变量是一个变体,应该是一个数字(我实际上考虑使用LONG而不是INT)。
我假设SalesCategory的一个例子是“ATD”,因此最高值(以及DMAX将返回的值)应为700?
这是对代码的一个小调整,这应该按照你的意图工作。我也在这里检查无效条目(Nz),并将结果转换为Long Integer(CLng)
Dim lngHighestNumber As Long
Dim strHighCategory As String
strHighCategory = InputBox("Please enter data", "ENTER", "ENTER")
lngHighestNumber = Nz(CLng(DMAX("[SaleValue]", "SalesTable", "[SalesCategory] = '" & strHighCategory & "'")), 0)