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