在我的Access查询中,我使用VBA函数查询查询字段中的值。
在表单中,如果stringval文本框有一个值,那么我想计算它,但如果没有,它应该保持为空(null)。
Function GetValue(stringval, numval)
Dim result
stringval= stringval & ""
result= IIf(stringval<> "", numval* 1.5, Null)
GetValue = Int(result)
End Function
现在,我有一个使用此查询的表单,并且在表单上是一个显示查询值的文本框。我希望在数字中用逗号格式化值以便于阅读。到目前为止我尝试的所有内容都没有显示任何逗号。
我试过了:
Standard
作为文本框的Format > Format
(在属性中)#,###.###
放入文本框格式值#,##0.0##
放入文本框格式值Data > Text Format
,但它只给我Plain Text
和Rich Text
- 没有数字选项。注意:如果我不使用自定义VBA函数,并将公式直接写入查询,那么它会显示逗号。但是当我将公式移动到函数中时,逗号就会丢失。
我该怎么办?
[更新]
我尝试了Gustav的解决方案,因为它们不适合我,我将这些作为项目添加到我上面的“我尝试过的”列表中。
另外,如果我在数据表视图中查看查询,则数字值按字母顺序排序,而不是按值的大小排序。当我在查询中直接使用forumulae而不是使用函数时,它按数字的值排序。我希望这是一个线索。
答案 0 :(得分:1)
Numbers没有格式。仅在显示时应用格式。
但是如果不是Null,请确保返回Double:
Function GetValue(stringval, numval)
Dim result
If stringval & "" <> "" Then
result = Int(CDbl(numval) * 1.5)
Else
result = Null
End If
GetValue = result
End Function
然后将您的格式应用于文本框
#,##0.0##
或强制返回格式化字符串:
If stringval & "" <> "" Then
result = Format(Int(CDbl(numval) * 1.5), "#,##0.0##")
Else
result = Null
End If
并跳过文本框的格式。
答案 1 :(得分:0)
解决方案是:函数必须声明为double
。
这允许查询的数据表视图知道它正在显示数字 - 因此您可以将字段的格式设置为Standard
以显示逗号。这也允许表单知道它有一个数字,它也会在那里显示逗号。我知道它与double
有关,但在此之前没有意识到该函数需要被声明为这样。
Function GetValue(stringval, numval) as double '<----THIS!!!!
Dim result
If stringval & "" <> "" Then
result = numval * 1.5
Else
result = 0 `<--can't return null here; use nz function in control source for textbox
End If
GetValue = int(result) 'to remove decimals
End Function
我遇到的问题是我的一些函数需要返回double
或null
,因为如果文本框中没有数据,我希望文本框保持空白。现在,至少我知道如何使函数生成的数字显示逗号。
以下是如何处理这样一个事实,即你不能将null作为double的值返回。 The function is originally from here
将此函数放入模块中以使其公开,然后在文本框的control source
中,而不是仅仅放置字段值,放置Zn(fieldvalue)
。这就像一个魅力(虽然使用control source
中的函数似乎在表单显示上有延迟)。这样,您可以将基础值保持为double
,并且仍然可以在表单和查询中显示逗号,同时在必要时将字段保留为空白。
Public Function Zn(pvar)
' Return null if input is zero or ""
If IsNull(pvar) Then
Zn = Null
ElseIf IsNumeric(pvar) Then
If pvar = 0 Then
Zn = Null
Else
Zn = pvar
End If
Else
If Len(pvar) = 0 Then
Zn = Null
Else
Zn = pvar
End If
End If
End Function