我有一些使用.CopyFromRecordset
的代码将字符串写入Excel工作表的代码。该记录集包含看起来像日期和数字的字符串,例如 1 和 09-08-2018 ,并且这些字符串正确保留为字符串。
我最近添加了一些其他处理来调整某些单元格的值。但是,当将值写回单元格时,我无法保留其当前状态(字符串,格式:常规,无前导撇号)。
以下代码说明了我的问题:
Public Sub MCVE()
With Range("A1")
Debug.Print .Value '09-08-2018
Debug.Print .Value2 '09-08-2018
Debug.Print VarType(.Value) = vbString 'True
Debug.Print .NumberFormat 'General
Debug.Print .PrefixCharacter 'Zero-length string
.Value = .Value 'I want to manipulate the value here too
'.Value2 = .Value2 'Yields the same result
Debug.Print .Value '08-09-2018
Debug.Print .Value2 '43351
Debug.Print VarType(.Value) = vbString 'False
Debug.Print .NumberFormat 'm/d/yyyy
Debug.Print .PrefixCharacter 'Zero-length string
End With
End Sub
我可以手动将.NumberFormat
设置为 @ 强制输入文本,但随后.NumberFormat
和.PrefixCharacter
都会发生变化,这进一步会带来麻烦将其导入另一个程序时。我还可以在分配字符串之前用撇号将其填充,但这也改变了.PrefixCharacter
。
我尝试使用.Value2
代替.Value
,没有区别。 .Text
是只读的,因此我不能将其用于分配。设置Application.Calculation = xlCalculationManual
之类的内容也没有影响。
这似乎很琐碎,但是经过数小时的尝试,我还没有找到可行的解决方案。
答案 0 :(得分:1)
以下代码:
Public Sub MCVE()
Dim OldFormat As String
With Range("A1")
OldFormat = .NumberFormat
.NumberFormat = "@"
.Value = .Value
.NumberFormat = OldFormat
End With
End Sub
解决了Excel 2010和2013中的问题,但(如注释中所述)在2016年将PrefixCharacter
更改为撇号。
此版本似乎可以在所有版本中使用:
Public Sub MCVE()
With Range("A1")
.NumberFormat = "@"
.Value = .Value
.ClearFormats
End With
End Sub