【发布时间】:2018-07-02 07:41:54
【问题描述】:
上周我创建了这个宏,它允许我创建我的数据记录。它将数据放在日期旁边,如果我们仍然在同一日期(如果没有移动到当前日期),则设置为替换日期。这是代码:
Sub Record()
'Get all the dates
'Selecting the data to copy
Range("C23:O23").Select
Selection.Copy
'Find the last used row in Column B
Dim LastRow As Range
With ActiveSheet
Set LastRow = .Cells(.Rows.Count, "B").End(xlUp)
End With
'if still today, replace data, if not record the data on the next line
If LastRow = Format(Date, "dd/mm/yyyy") Then
LastRow.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats,
Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Else
LastRow.Offset(1, 0).Value = Format(Date, "dd/mm/yyyy")
LastRow.Offset(1, 1).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats,
Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Application.CutCopyMode = False
End Sub
问题是,上周它运行良好。今天当我打开它时,它似乎将日期设置为美国格式(07/02/2018 而不是 02/07/2018),即使我在 vba 代码中设置了格式。 Thisa 使宏变得无用,因为它仍然会检查英文日期格式,因此每次单击按钮时都会跳过一行。
非常感谢任何帮助。
【问题讨论】:
-
在我开始检查您的代码之前,已经有一些危险信号,例如使用
Select或ActiveSheet应该总是 (如果可能 - 在这种情况下是) 避免。此外,乍一看,您似乎将Paste和PasteSpecial混合成某种奇怪的混合体 -
如果 LastRow 是一个范围并指向一个包含真实日期的单元格,那么
LastRow = Format(Date, "dd/mm/yyyy")应该从不为真。如果 LastRowm 指向看起来像日期的文本,则修复您的数据。 -
它指向看起来像数据的文本,上周它似乎工作得很好。
-
正如@Jeeped 所说。
If LastRow = Date应该可以工作,这表明您的日期没有被读取为日期。让 VBA 将它们读取为日期或将原始数据转换为真实日期可能是一项相当简单的任务。日期是如何输入到工作表上的? -
单元格是否格式化为文本?