在我正在制作的工作表中,我将一些旧数据存储为以管道分隔的字符串。
存储数据的功能如下:
target_cell.Offset(0, i) = Join(Application.WorksheetFunction.Transpose(source_range(i).Resize(, 1)), "|")
工作正常,并产生一个类似于这样的字符串:
42145,5416666662|42145,6249999996|42145,2083333329|42144,8333333329|42145,9999999996
现在,有时,我想查看我的旧数据,因此尝试将其写入工作表。我的代码中执行此操作的部分如下所示:
temp_arr = Split(source_cell.Offset(0, i), "|", -1, vbTextCompare)
target_range(i).Resize(, 1) = Application.WorksheetFunction.Transpose(temp_arr)
For Each c In target_range(i).Resize(, 1)
If Not IsEmpty(c) Then
c = CDate(c)
c.NumberFormat = "dd. mmm kl. hh"
End If
Next
但是,我在行c = CDate(c)
上收到溢出错误,当我查看工作表时,我找到的值是421455416666662
,421456249999996
等,换句话说,它看起来这些逗号已经从将它们写回工作表的某个地方的值中删除了。
有没有人知道过程中的哪一步删除了逗号,以及我可以做些什么来避免这种情况?
答案 0 :(得分:2)
逗号被剥离,因为Excel可能错误地认为它是千位分隔符。
修改#1 强>
使用您的数据,我跑了:
Sub ytrewq()
Dim s As String, D As Date
s = "42145,5416666662"
s = Replace(s, ",", ".")
Range("A1").Value = s
D = CDate(Range("A1").Value)
MsgBox D
End Sub
得到了:
我只是不知道这是否适用于您所在的地区。
答案 1 :(得分:1)
您可以处理运行时错误6 /溢出:
On Error GoTo ErrHandler
Dim value As String
For Each c In target_range(i).Resize(, 1)
If Not IsEmpty(c) Then
value = c.value
c.Value = CDate(value)
c.NumberFormat = "dd. mmm kl. hh"
End If
Next
CleanExit:
Exit Sub 'Function?
ErrHandler:
If Err.Number = 6 Then 'overflow
value = Left$(value, 5) & "," & Right$(value, Len(value) - 5)
Resume
Else
MsgBox "Unhandled error: " & Err.Description
Resume CleanExit
End If
此处理程序假定唯一可能的溢出错误是因为value
到Date
的转换因您指定的原因而溢出。可能不理想。它还假设区域设置,并且数字日期有5位数字。应该是这种情况,除非您的数据 真的 旧。
答案 2 :(得分:0)
将c = CDate(c)
更改为c = CDate(c.Text)