Excel工作表数据单元格格式未按预期呈现-范围值转换问题

时间:2018-06-28 09:46:34

标签: excel-vba vba excel

我有一本带有工作表的工作簿来显示一堆数据。 第一行是标题行,每一列都与特定格式相关联。 从外部数据源(文件导入)自动更新此工作表(通过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

当我检查单元格格式时,可以看到列格式已设置。

enter image description here

奇怪的是这些单元格未按预期渲染。在下面的示例中,预计 03ATT cur USD 会以美元的货币呈现,而 04ATT cur eur 会以欧元的货币呈现

enter image description here

如果我选择一个单元格,请在 03ATT cur USD 列中说值为3的单元格

enter image description here

并进行验证(按Enter键-请注意,我不会更改单元格中的值),然后将采用预期的格式。

enter image description here

我不得不提到,在更新数据之前,使用以下代码禁用了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 更好)失败了。有没有搞错 ?我想知道转换是否可以应用于范围值?

1 个答案:

答案 0 :(得分:0)

结束问题 在寻找解决方案后,似乎应该重新制定该问题了。

顺便说一句 我尝试从某些单元格复制值1,然后使用不同的选项复制PasteSpecial。 我可以得到预期的格式,但是这样做的缺点是在没有内容(空或空)的单元格中将其设置为0(零)。零单元格值或空单元格在我的应用程序内容中具有不同的含义。 同样,此解决方案也无法显示日期。