VBA格式函数不工作

VBA格式函数不工作,vba,excel,Vba,Excel,上周我创建了这个宏,它允许我创建数据记录。它将数据放在日期旁边,如果我们仍然在同一日期,则设置为替换日期,如果我们没有移动到当前日期。代码如下: 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

上周我创建了这个宏,它允许我创建数据记录。它将数据放在日期旁边,如果我们仍然在同一日期,则设置为替换日期,如果我们没有移动到当前日期。代码如下:

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
问题是,上周它运行得非常好。今天,当我打开它时,它似乎将日期设置为美国格式2018年2月7日,而不是2018年7月2日,尽管我在vba代码中设置了格式。Thisa使宏无效,因为它仍然检查英文日期格式,因此每次单击按钮时跳过一行


非常感谢您的帮助。

仔细查看您的代码,我想知道问题的一部分是否在于您正在使用返回字符串的最后一个单元格添加日期。 代替LastRow.Offset1,0.Value=FormatDate,dd/mm/yyyy只需使用LastRow.Offset1,0=Date

要更正工作表上已有的日期,可以将值乘以1,或加0将其转换为数字而不是文本,然后格式化为日期:

在任何空单元格中输入1并复制该单元格。 突出显示日期,右键单击并选择“粘贴特殊”。 在“特殊粘贴”对话框中,选择“倍增”,然后单击“确定”。 如果Paste特殊方法不起作用,这段代码也应该起作用,但我觉得它不能解决问题的根源

If CDATE(LastRow) = Date Then

在我开始检查您的代码之前,已经有一些危险信号,比如使用Select或ActiveSheet,如果可能的话,应该始终使用它们——在本例中,这是可以避免的。此外,乍一看,您似乎将Paste和PasteSpecial混合到某种奇怪的混合中。如果LastRow是一个范围,并指向一个包含真实日期的单元格,那么LastRow=FormatDate,dd/mm/yyyyy永远不应该为真。如果LastRowm指向的是看起来像日期的文本,那么请修复您的数据。它指向的是看起来像数据的文本,上周它似乎工作得很好。正如@Jeeped所说。如果LastRow=Date,则表明您的日期没有被读取为日期。让VBA将其读取为日期,或者将原始数据转换为真实日期,这可能是一个相当简单的任务。如何将日期输入到工作表中?单元格格式是否为文本?上周,当我仅使用日期时,它会将日期转换为数字,但今天它似乎工作正常。谢谢!Excel将日期作为一个数字保存—它是自1900年1月1日以来的天数,所以今天的日期是43283—分数用于表示时间,所以43283.5是正午。只需将单元格的格式设置为日期,而不是将值设置为日期,所有内容都应该是好的-单元格所包含的值和显示的内容可能会非常不同。您忘了在“粘贴”部分中提到“设置值”,而不是“全部”。@JohnyL我从来没有想过只选择值。它使用值将其转换为一个数字,但它仍然是左对齐的,所以肯定仍然被视为文本?当我选择All时,它返回右对齐,这是数字的位置。