使用Access VBA(DMax)函数在Where / criteria列中使用表字段和变量

时间:2017-08-25 14:07:08

标签: vba function ms-access access-vba

这可能是一个基本的格式化问题,但出于某种原因,我无法找到解决问题的方法。我的方案是我想使用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 & "'")

1 个答案:

答案 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)