访问VBA格式

时间:2010-10-07 15:38:42

标签: ms-access formatting access-vba

嘿所有,我最终设法将我的数据库很好地与Excel集成,但最后在我向老板展示后,他们让我再次在Access中开发表单和报表。幸运的是,这并不需要太长时间,因此我最终为一个后端数据库做了两个前端。但最终它将是一个完全Access数据库,只使用了一点Excel集成;基本上是转账电子表格方法,将每日交易结束时的股价转入Access。

现在我已经到了数据库已经准备好进行拆分和填充的地步。(解决这个问题的最佳方法是什么,首先填充或首先拆分?)

我问的问题如下:

这可能看起来是一个相当简单的问题,但到目前为止,我还没有得到谷歌的帮助,或者我没有在我的搜索中使用正确的关键字,所以我想在这里有什么更好的地方可以询问;有没有办法格式化通过某些VBA代码生成并放在Access中的新表中的数字,使它们看起来像:

因此,如果它是1,000,000那么它将显示为1米 或者,如果它是10,000,则它显示为10k 所以基本上如果它有三个0那么它就是K. 如果它有六个0,则它是一个M

我最初使用了一些VBA来按以下方式格式化数字:

ChangeInShare = Format(ChangeInShare, "#,##.00")

但随后请求缩短了一些数字以使报告看起来更整洁。

最终表格采用文本格式btw。

谢谢

4 个答案:

答案 0 :(得分:3)

您可以使用模运算符来测试数字是否可以被1000000或1000分割,然后替换最后的零。

也许这个功能指向正确的方向:

Public Function fmt(val As Long) As String
  Dim result As String
  If val Mod 1000000 = 0 Then
    result = (val \ 1000000) & "M"
  ElseIf val Mod 1000 = 0 Then
    result = (val \ 1000) & "K"
  Else
    result = val
  End If
  fmt = result
End Function

然后是一些测试电话:

? fmt(471000)
471K
? fmt(4711)
4711
? fmt(4000000)
4M
? fmt(40000)
40K

答案 1 :(得分:2)

嗨Muffi D
除了vanjes可以接受的非常好的答案还有另外一个想法: 科学记数法怎么样?

Debug.Print FStr(10)
Debug.Print FStr(2000)
Debug.Print FStr(300000)
Debug.Print FStr(40000000)
Debug.Print FStr(5000000000#)
Debug.Print FStr(12)
Debug.Print FStr(2345)
Debug.Print FStr(345678)
Debug.Print FStr(45678901)
Debug.Print FStr(5678901234#)

Function FStr(ByVal d As Double) As String
   FStr = Format(d, "0.####E+0")
End Function

然后你会得到:

1,0E+1
2,000E+3
3,E+5
4,E+7
5,E+9
1,2E+1
2,345E+3
3,4568E+5
4,5679E+7
5,6789E+9

如果您需要双打(或货币),您可以使用vanjes答案,但请使用ModF功能:

Function ModF(ByVal value As Double, _
              ByVal div As Double) As Double
   ModF = value - (Int(value / div) * div)
End Function

Function fmtF(ByVal value As Double) As String
  Dim result As String
  If ModF(value, 1000000000) = 0 Then
    result = (value / 1000000000) & "G"
  ElseIf ModF(value, 1000000) = 0 Then
    result = (value / 1000000) & "M"
  ElseIf ModF(value, 1000) = 0 Then
    result = (value / 1000) & "K"
  Else
    result = value
  End If
  fmtF = result
End Function

问候 糟糕

答案 2 :(得分:1)

您可以在分发数据库之前随时拆分给用户,但我不知道“填充”是什么意思。

有关拆分的信息,请参阅"Splitting your app into a front end and back end Tips"页面。请参阅免费的Auto FE Updater utility,以便相对轻松地分发新的FE。

答案 3 :(得分:0)

我也在想;我有一个CurrencyCode,它定义了公司所处的任何类型的货币;现在VBA中的所有计算都已完成。我想知道有没有办法编写一个SQL语句,例如;如果CurrencyCode = GBP,则对于该字段中存在的所有不同货币,结果字段显示为2300万英镑而不是23m等。

这又需要立即进行硬编码;唯一的问题是,如果将来如果我不在公司,那么有人必须添加一家公司,而公司没有这样做的代码;那会是什么方式来处理?他们是否需要有人需要知道如何使用SQL或VBA并能够改变;为此我更喜欢在SQL中使用它,因为我可以将它放在数据库的手册中,而对于初学者来说,使用VBA则不那么令人生畏。

结果值必须在同一列中,因此所有不同的IF和Wheres都需要成为同一SQL语句的一部分,这是因为有些报告使用单个列来表示不同的公司不同的货币。

谢谢!