如何在表单中使用逗号显示数字值

时间:2018-01-14 19:25:04

标签: access-vba format

在我的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 TextRich Text - 没有数字选项。
  • 从函数
  • 返回一个double

注意:如果我不使用自定义VBA函数,并将公式直接写入查询,那么它会显示逗号。但是当我将公式移动到函数中时,逗号就会丢失。

我该怎么办?

[更新]

我尝试了Gustav的解决方案,因为它们不适合我,我将这些作为项目添加到我上面的“我尝试过的”列表中。

另外,如果我在数据表视图中查看查询,则数字值按字母顺序排序,而不是按值的大小排序。当我在查询中直接使用forumulae而不是使用函数时,它按数字的值排序。我希望这是一个线索。

2 个答案:

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

我遇到的问题是我的一些函数需要返回doublenull,因为如果文本框中没有数据,我希望文本框保持空白。现在,至少我知道如何使函数生成的数字显示逗号。

以下是如何处理这样一个事实,即你不能将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