gpt4 book ai didi

vba - 列格式转换为数字,但显示为文本

转载 作者:行者123 更新时间:2023-12-03 02:24:10 25 4
gpt4 key购买 nike

我有一个工作表,它是使用 ADO select 语句从另一个工作表生成的。所以我必须手动设置一些格式。这就是我所做的。

With ThisWorkbook.Sheets("Invoice")
.Columns(1).Resize(.Rows.count - 1, 1).Offset(1, 0).NumberFormat = "yyyy-mmm"
.Columns(6).Resize(.Rows.count - 1, 1).Offset(1, 0).NumberFormat = "dd-mm-yyyy"
.Columns(10).Resize(.Rows.count - 1, 1).Offset(1, 0).NumberFormat = "0.00"
End With

此处第 1 列和第 6 列 am 转换为两种日期格式。第 10 列我需要转换为数字格式。但 1 和 6 转换得很好。但 10 仍然显示为文本,因此在左侧对齐。我们的电脑上禁用了屏幕抓取,否则我可以共享我的实际屏幕。希望它清楚。

最佳答案

您需要将其解析为 General首先使用TextToColumns然后应用您的格式。像下面这样的东西应该可以工作:

With .Columns(10).Resize(.Rows.count - 1, 1).Offset(1, 0)
.TextToColumns Destination:=.Range("A1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 1)
'DataType:=xlDelimited, _
'FieldInfo:=Array(1, 1)
.NumberFormat = "0.00"
End with

或者正如@Whome评论的那样,如果都是数字,那么你可以简单地:

With .Columns(10).Resize(.Rows.count - 1, 1).Offset(1, 0)
.Value2 = .Value2
.NumberFormat = "0.00"
End with

编辑1:解释了上面的第一个代码。使用.Range("A1")作为目的地利用 Range.Range Excel VBA 中的表示法。这意味着您可以重新索引(不确定这是否是正确的术语)Range使用范围对象 Range方法。例如:

Dim r As Range: Set r = Range("B1:C10")
Debug.Print r.Range("A1").Address '/* this gives you $B$1 */
Degug.Print r.Range("B5").Address '/* this gives you $C$5 */

插图:

enter image description here

并在您的示例中应用该逻辑:

.Columns(10).Resize(.Rows.count - 1, 1).Offset(1, 0) '/* refers to J2:J1048576 */

Range("A1")该范围(或 Jeeped 评论的 Cells(1))是 $J$2 .

对于您的第二次询问,请参阅@Jeeped的评论:

“Sandeep 在他的第二次询问中提出了一个有效的观点。如果您不打算将所有定界符参数强制设置为 false,也许 DataType:=xlFixedWidth, FieldInfo:=Array(0, 1) 会更好。您永远不会了解用户在 TextToColumns 分隔符参数方面留下的内容。”

关于vba - 列格式转换为数字,但显示为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49124720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com