Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel工作表数据单元格格式未按预期呈现-范围值转换问题_Excel_Vba - Fatal编程技术网

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

Excel工作表数据单元格格式未按预期呈现-范围值转换问题,excel,vba,Excel,Vba,我有一个工作簿,其中有一张用来显示一组数据的工作表。 第一行是标题行,每列与特定格式关联。 此工作表从外部数据源(文件导入)自动更新(通过VBA宏代码) 数据值更新后,格式也会更新(并应用于新行)。在代码提取中,rColumn是标题下的数据列范围。 r列从第2行开始,标题在第1行sType是与标题关联的类型: On Error GoTo ErrorHandler With rColumn .Validation.Delete

我有一个工作簿,其中有一张用来显示一组数据的工作表。 第一行是标题行,每列与特定格式关联。 此工作表从外部数据源(文件导入)自动更新(通过VBA宏代码)

数据值更新后,格式也会更新(并应用于新行)。在代码提取中,rColumn是标题下的数据列范围。 r列从第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(did中的值是一个整数-实际上VBA中的Long更好)非常失败。搞什么鬼?我想知道转换是否可以应用于范围值?

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

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

单元格是否包含实际的“数字”数据,或“数字格式为文本”?您认为是日期的值和数字是类似于日期或数字的文本。您可以看到,只要您进入单元格并退出,它就会恢复为真数字并接受数字格式。最后一个证明是,作为文本,默认情况下它是左对齐的。一旦它成为一个真数字,它就会右对齐,因为默认情况下所有数字和日期都是右对齐的。使用文本到列,固定宽度,完成将看起来像日期或数字的文本快速转换为实际日期或数字。@Chronocial某些值可能在某个点被格式化为文本,然后从一个工作表复制到另一个工作表formatted@Jeeped如果应用了其他格式,为什么会显示为文本。这些应该如何转换?