嘿所有,我最终设法将我的数据库很好地与Excel集成,但最后在我向老板展示后,他们让我再次在Access中开发表单和报表。幸运的是,这并不需要太长时间,因此我最终为一个后端数据库做了两个前端。但最终它将是一个完全Access数据库,只使用了一点Excel集成;基本上是转账电子表格方法,将每日交易结束时的股价转入Access。
现在我已经到了数据库已经准备好进行拆分和填充的地步。(解决这个问题的最佳方法是什么,首先填充或首先拆分?)
我问的问题如下:
这可能看起来是一个相当简单的问题,但到目前为止,我还没有得到谷歌的帮助,或者我没有在我的搜索中使用正确的关键字,所以我想在这里有什么更好的地方可以询问;有没有办法格式化通过某些VBA代码生成并放在Access中的新表中的数字,使它们看起来像:
因此,如果它是1,000,000那么它将显示为1米 或者,如果它是10,000,则它显示为10k 所以基本上如果它有三个0那么它就是K. 如果它有六个0,则它是一个M
我最初使用了一些VBA来按以下方式格式化数字:
ChangeInShare = Format(ChangeInShare, "#,##.00")
但随后请求缩短了一些数字以使报告看起来更整洁。
最终表格采用文本格式btw。
谢谢
答案 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语句的一部分,这是因为有些报告使用单个列来表示不同的公司不同的货币。
谢谢!