无法将日期自动格式更改为Access VBA中的数字

时间:2014-10-22 09:41:31

标签: mysql excel-vba access-vba vba excel

我有一个Access应用程序,它使用MySQL数据库中的数据自动生成Excel报告。

在特定列中输入的数据到目前为止是错误地自动格式化的。

我在另一个列中遇到了同样的问题,其中货币是自动编码的,并使用.Format而不是.NumberFormat解决它,基于在stackoverflow中发布的类似问题中提出的解决方案。

更具体地说,我使用了以下代码:

Range("G1", AmountLastCell).Select

    For Each c In Selection
        c = Format(c, "Currency")
    Next

而不是自动套用格式。

现在我想将列转换为Number,使用相同的技术无法工作(使用c = Format(c," Number")。列中的所有条目都取值#34 ; Num0ber"

疯狂的部分是,如果我将列值转换为货币,我会得到正确的结果(意味着绝对值是正确的。保存小数和货币符号)。

任何想法???

ps:NumberFormat(" 0")不起作用。我还尝试使用CStr将值转换为文本,并将列更改为常规,但也没有。也可以使用。

我的声明如下:

Dim rst_Data  As ADODB.Recordset

这是存储数据的地方

Dim report_Workbook  As Workbook

我创建的工作簿是为了保存从数据库中获取的记录集。

 Dim c    As Range

我在循环遍历我的范围时使用的虚拟变量来格式化每个单元格。

4 个答案:

答案 0 :(得分:1)

一些事情:

首先,如果你正在迭代一系列单元格(即使你在访问中写这个,我假设你正在操作excel表作为一个对象)当你获得或设置一个单元格的值时单元格,您是否必须将其设置为c.Valuec.Value = [assigned value]

其次,查看您的声明可能会有所帮助。根据我的经验,他们就像代码一样经常出现问题。

话虽如此,如果你在循环体内用c.Value替换c后仍然遇到同样的错误,我确实有一个快速而肮脏的想法。

如果日期值误解了数字,那么这个数字就是一个有说服力的表示(例如,因为它是一个数字字段,其中每个数字必须是8位数[例如银行路由号码],其中转换为11 / 15/2014 from 11152014)你应该能够使用CStr()显式地键入convert并使用“/”上的split函数然后将split方法返回的数组的元素连接到数字的字符串表示形式然后希望CDbl()CLng()结果字符串返回到所需的数字数据类型。它不是一个特别优雅的解决方案,但它似乎应该是可行的。这就是我将笨拙的oracle datetime数据类型转换为可访问的可用形式。

试试这个:

Dim toSplit As String
Dim strArray As Variant
Dim outStr as String

For Each c in Selection

    toSplit = CStr(c.Value)
    strArray = Split(c, "/")
    outStr = strArray(0)&strArray(1)&strArray(2)
    c.Value = CLng(outStr)

Next

答案 1 :(得分:0)

如果您想要2个小数位,我会使用Format(c,"#")转换为数字格式或Format(c,"#.##")

答案 2 :(得分:0)

删除引号.... c=Format(c,NUMBER)

答案 3 :(得分:0)

对不起,我一直在从Excel的角度来看待这个问题......尝试{2010}的c=FORMAT(c,"Standard")c=FORMAT(c,"General Number")

“标准”为您提供2位小数,“通用号码”为您提供没有逗号的数字。