我有一个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
我在循环遍历我的范围时使用的虚拟变量来格式化每个单元格。
答案 0 :(得分:1)
一些事情:
首先,如果你正在迭代一系列单元格(即使你在访问中写这个,我假设你正在操作excel表作为一个对象)当你获得或设置一个单元格的值时单元格,您是否必须将其设置为c.Value
或c.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位小数,“通用号码”为您提供没有逗号的数字。