VBA 当数字包含逗号时,数字格式为文本的问题

VBA Issue with Number formatted as text when numbers include comma

我使用 vba 脚本打开另一个工作簿。此工作簿的格式为 .XLS,数据库中的内容存储如下:

"Name1"  "0"  "7,98"   
"Name2"  "5"  "1"  
"Name3"  "2"  "7,1"  

使用 VBA 脚本打开工作簿时,每个包含逗号的单元格都被解释为文本并显示此警告:
此单元格中的数字格式为文本或以撇号开头

奇怪的是,如果我通过双击打开文件,数字只是格式化为文本并且没有显示任何错误。我想,Excel 正在做一些口译,但没有用。
我的代码是:

Dim WorkBookImport As Workbook
Name = Application.GetOpenFilename()
If Name <> False Then
   Set WorkBookImport = Workbooks.Open(Filename:=Name)
End If

我尝试了以下所有方法:

Range(mycolumn).Value = Range(mycolumn).Value 

使用 CDbl(.Value) 的 For 循环
范围(我的列).TextToColumns ...

没有任何效果 ;( 请帮忙!

单元格的格式有问题。您应该使用 NumberFormat 来更改它。

Sub FormatNumber()
ThisWorkbook.Worksheets("YourWorkbook").Range("YourRange") = CDbl(ThisWorkbook.Worksheets("YourWorkbook").Range("YourRange"))
ThisWorkbook.Worksheets("YourWorkbook").Range("YourRange").NumberFormat = "General"
End Sub

如果遇到相反的问题,您也可以使用 NumberFormat 将其更改为文本,在这种情况下,您可以使用 NumberFormat = "@"

Option Explicit

Sub edksg()
    Dim c As Range
    
    Set c = Sheet1.Range("D3")
    
    c.Value2 = CDbl(c.Value2)
    
End Sub

当工作表的单元格 D3 格式设置为文本时,对我来说工作正常。

当然,我的位置使用逗号作为小数点分隔符,因此如果您的位置使用不同的标准,则可能存在问题。在这种情况下,执行类似 CDbl(Replace(c.Value2, ",", Application.DecimalSeparator, 1, -1, vbBinaryCompare)) 的操作可能会解决部分问题。

如果您想遍历整个某些列,最终结果可能看起来像这样,假设您要转换为数字的值在列 C 中。

Option Explicit

Sub edksg()
    Dim c As Range
    Dim r As Range
    
    Set r = Sheet1.Range("C1:C" & Sheet1.Range("C" & Sheet1.Rows.Count).End(xlUp).Row)
    
    For Each c In r
        If Len(c) > 0 Then
            c.Value2 = CDbl(Replace(c.Value2, ",", Application.DecimalSeparator, 1, -1, vbBinaryCompare))
        End If
    Next c
    
End Sub