我有一本带有工作表的工作簿来显示一堆数据。 第一行是标题行,每一列都与特定格式相关联。 从外部数据源(文件导入)自动更新此工作表(通过VBA宏代码)。
在数据值更新之后,格式也被更新(并应用,因此它适用于新行)。在 rColumn 之后的代码摘录中,是标题下方的数据列范围。 rColumn 从第2行开始,标题位于第1行。 sType 是与标题相关联的类型:
On Error GoTo ErrorHandler
With rColumn
.Validation.Delete
Select Case sType
Case "text"
.Value = CStr(.Value)
.NumberFormat = "@"
Case "integer"
.Value = CLng(.Value)
.NumberFormat = "0"
Case "float"
.Value = CDbl(.Value)
.NumberFormat = "0.0"
Case "percentage"
For Each c In rColumn
.Value = CDbl(.Value)
Next c
.NumberFormat = "0.00%"
Case "Image"
.NumberFormat = "@"
Case "currency euro"
.Value = CDbl(.Value)
.NumberFormat = "#,##0.00 $"
Case "currency USD"
.Value = CDbl(.Value)
.NumberFormat = "#,##0.00 [$USD]"
End Select
End With 'rColumn
当我检查单元格格式时,可以看到列格式已设置。
奇怪的是这些单元格未按预期渲染。在下面的示例中,预计 03ATT cur USD 会以美元的货币呈现,而 04ATT cur eur 会以欧元的货币呈现
如果我选择一个单元格,请在 03ATT cur USD 列中说值为3的单元格
并进行验证(按Enter键-请注意,我不会更改单元格中的值),然后将采用预期的格式。
我不得不提到,在更新数据之前,使用以下代码禁用了GUI和计算刷新(以加快处理速度):
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
,但是在数据更新和格式更新之后,将它们重置,以便刷新GUI:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
这是一个问题,当应用如块代码中所示的格式时,为什么我没有得到正确的格式渲染(本文的上半部分)。 我在Win 10上使用Excel 2016。
考虑到有关此帖子的评论,看来问题在于将数据单元值(实际上是范围单元值)从一种数字表示形式转换为另一种数字表示形式。目标表示形式必须与源值兼容。应用类似CStr()CLgn()等的转换会在发生转换的确切行上引发错误13“类型不匹配”。说明不言而喻,但我不知道是什么问题。例如,使用CLng()转换的值 9535 (实际上是一个整数-在VBA中实际上是 Long 更好)失败了。有没有搞错 ?我想知道转换是否可以应用于范围值?
答案 0 :(得分:0)
结束问题 在寻找解决方案后,似乎应该重新制定该问题了。
顺便说一句 我尝试从某些单元格复制值1,然后使用不同的选项复制PasteSpecial。 我可以得到预期的格式,但是这样做的缺点是在没有内容(空或空)的单元格中将其设置为0(零)。零单元格值或空单元格在我的应用程序内容中具有不同的含义。 同样,此解决方案也无法显示日期。