【发布时间】:2016-02-14 04:12:52
【问题描述】:
我有一行数据(单元格 A3 及以下)包含yyyymmdd hhmmss 格式的 Unix 时间戳,我正在尝试将其转换为 mm/dd/yy hh:mm 格式自动。
当我的数据从单元格 A1 开始时,我到目前为止的代码有效,但我需要 A1 保持空白,因此数据从 A2 开始。 Here是A列的示例截图:
Sub auto_open()
'
' auto_open Macro
'
'
ChDir "C:\"
Workbooks.Open Filename:="C:\Users\username\Desktop\file1.csv"
Intersect(Sheets("file1").Range("A:EW"), Sheets("file1").UsedRange).Copy ThisWorkbook.Sheets("Golden").Range("A2")
Windows("file1.csv").Activate
Application.CutCopyMode = False
ActiveWorkbook.Close SaveChanges = False
Dim x As Integer
Dim y As String
Dim z As String
Dim w As String
NumRows = Range("A3").End(xlDown).Row
Windows(ThisWorkbook.Name).Activate
For x = 2 To NumRows
z = Cells(x, 1).Value
y = Mid(z, 5, 2) & "/" & Mid(z, 7, 2) & "/" & Left(z, 4)
w = Mid(z, 10, 2) & ":" & Mid(z, 12, 2) & ":" & Mid(z, 14, 2)
y = y + TimeValue(w)
Cells(x, 1).Value = y
Next x
Range("A3").Select
End Sub
无论我将范围设置为 A2 还是 A3 以及向下,都会出错。
有人推荐吗?
调试突出显示y = Mid(z, 5, 2) & "/" & Mid(z, 7, 2) & "/" & Left(z, 4),但我不确定问题出在哪里。
不幸的是,格式化单元格(自定义>mm/dd/yyyy hh:mm:ss)在我的情况下也不起作用。
【问题讨论】:
-
你得到什么错误?将
z更改为Range并尝试z = Cells(x,1),然后看看它是否有效。这可能是最快的解决方法。 -
运行时错误 13:类型不匹配
-
使用您使用的方法,您不会到达最后一行。您有 numrows 计算范围内的行数。假设您的数据的最后一行在第 20 行,numrows 将等于 18,然后当传递到 for 循环时,您只会转到第 18 行而不是 20。更改为
numRows = Range("A3").end(xlDown).Row这将在这里的实例中为您提供 20 . 然后你的 for 循环将从 3 转到 NumRows。这不是你的问题,但以后会成为问题。 -
将 'dim z as string' 更改为 'dim z as range' 并更改 z=Cells(x,1) - 给出运行时错误 91,未设置对象变量或块变量。
-
@Brad - 天哪!感谢您指出这一点。
标签: vba excel datetime timestamp