Ms access 访问VBA格式

Ms access 访问VBA格式,ms-access,formatting,vba,Ms Access,Formatting,Vba,嘿,大家好,最后我成功地将我的数据库与Excel很好地集成在一起,但在我向老板展示数据库后,他们要求我再次在Access中开发表单和报表。幸运的是,这并没有花太长时间,所以我最终为一个后端数据库做了两个前端。但最终它将是一个完全访问的数据库,只使用一点Excel集成;基本上是将每日交易结束时的股价转换为Access的转换电子表格方法 现在,我已经到了可以拆分和填充数据库的地步。(解决这个问题的最佳方法是先填充还是先拆分?) 我要问的问题如下: 这似乎是一个相当简单的问题,但到目前为止,我还没有得

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

现在,我已经到了可以拆分和填充数据库的地步。(解决这个问题的最佳方法是先填充还是先拆分?)

我要问的问题如下:

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

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

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

ChangeInShare = Format(ChangeInShare, "#,##.00")
但随后,要求缩短一些数字,使报告看起来更整洁

最后一个表采用文本格式的值


谢谢

您可以使用模运算符来测试数字是否可除以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
嗨,穆菲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 answer,但可以使用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
问候
Oops

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


有关拆分的信息,请参见页面。。看看免费版,让新FEs的发布相对无痛。

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

同样,现在需要硬编码;唯一的问题是,如果将来我不在这家公司,有人必须加入一家没有代码的公司;那怎么办呢?他们是否需要有人知道如何使用SQL或VBA并能够进行更改;为此,如果可能的话,我更喜欢用SQL来实现,因为这样我就可以把它放在数据库手册中,对于初学者来说,使用SQL要比使用VBA容易得多

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


谢谢

这也是一个很好的答案,但我忘了在我之前的帖子中明确指出,数据库将用于生成财务报告,用于内部或外部,虽然在大学学习工程时,这将是一种更好的方法,在我工作的地方,他们希望它能够呈现给他们的客户。谢谢你哦,不管怎样,知道这一点肯定很好。:)谢谢你,万杰,我现在就来试试。嘿,谢谢!当我说“填充”时,我的意思是填充某些无法通过表单直接填充的表格。这是因为这些表格包含历史股市数据,以及历史货币汇率数据;它们将通过表单进行更新,但当初始数据输入时,由于输入的实际数据量,它将通过Excel电子表格直接进入表格。您可能只需要更改货币字段的格式即可显示英镑。并且在查询中有一个计算字段,用于将基础货币转换为要显示的货币。