【问题标题】:Excel sheet data Cell Format not rendered as expected - range value conversion issueExcel 工作表数据单元格格式未按预期呈现 - 范围值转换问题
【发布时间】:2018-06-28 09:46:33
【问题描述】:

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

并验证它(按回车键 - 注意我不会更改单元格中的值)然后应用预期的格式。

我不得不提一下,在更新数据之前,使用以下代码禁用 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(在 did 中是一个整数 - 实际上 VBA 中的 Long 更好)会惨遭失败。有没有搞错 ?我想知道转换是否可以应用于范围值?

【问题讨论】:

  • 单元格是否包含实际的“数字”数据,或“数字格式为文本”?
  • 那些你认为是日期和数字的值是看起来像日期或数字的文本。您可以看到,一旦您进入单元格并退出,它就会恢复为真实数字并接受数字格式。最后的证明是,作为文本,默认是左对齐的。一旦它变成一个真实的数字,它就会右对齐,因为所有数字和日期都是默认的。
  • 使用 text-to-columns、固定宽度、finish 将看起来像日期或数字的文本快速转换为真实的日期或数字。
  • @Chronocidal 某些值可能会在某些时候被格式化为文本,然后从一张纸复制到另一张纸然后格式化
  • @Jeeped 为什么如果应用另一种格式,它会显示为文本。这些应该如何转换?

标签: excel vba


【解决方案1】:

结束问题 在挖掘找到解决方案之后,似乎应该重新制定问题,我会这样做。

顺便说一句 我尝试从某个单元格中复制值 1,然后使用不同的选项复制 PasteSpecial。 我可以获得呈现的预期格式,但这有一个缺点,即在没有内容(null 或空)的单元格中设置为 0(零)。零单元格值或空单元格在我的应用程序内容中具有不同的含义。 此外,此解决方案不适用于呈现日期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    相关资源
    最近更新 更多