【问题标题】:VBA Format Function not workingVBA 格式功能不起作用
【发布时间】: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 使宏变得无用,因为它仍然会检查英文日期格式,因此每次单击按钮时都会跳过一行。

非常感谢任何帮助。

【问题讨论】:

  • 在我开始检查您的代码之前,已经有一些危险信号,例如使用 SelectActiveSheet 应该总是 (如果可能 - 在这种情况下是) 避免。此外,乍一看,您似乎将PastePasteSpecial 混合成某种奇怪的混合体
  • 如果 LastRow 是一个范围并指向一个包含真实日期的单元格,那么 LastRow = Format(Date, "dd/mm/yyyy") 应该从不为真。如果 LastRowm 指向看起来像日期的文本,则修复您的数据。
  • 它指向看起来像数据的文本,上周它似乎工作得很好。
  • 正如@Jeeped 所说。 If LastRow = Date 应该可以工作,这表明您的日期没有被读取为日期。让 VBA 将它们读取为日期或将原始数据转换为真实日期可能是一项相当简单的任务。日期是如何输入到工作表上的?
  • 单元格是否格式化为文本?

标签: vba excel


【解决方案1】:

查看您的代码,我想知道部分问题是否在于您使用返回字符串的FORMAT 将日期添加到最后一个单元格。
代替LastRow.Offset(1, 0).Value = Format(Date, "dd/mm/yyyy") 只需使用LastRow.Offset(1,0) = Date

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

  • 在任何空单元格中输入1 并复制该单元格。
  • 突出显示您的日期,右键单击并选择选择性粘贴
  • 选择性粘贴对话框中选择Multiply并点击OK。

如果“选择性粘贴”方法不起作用,这段代码也应该可以工作,但我认为它不能解决问题的根源。

If CDATE(LastRow) = Date Then

【讨论】:

  • 上周,当我只使用 DATE 时,它会将日期转换为数字,但今天它似乎工作了。谢谢!
  • Excel 将日期保存为数字 - 它是自 1900 年 1 月 1 日以来的天数,因此今天的日期是 43283 - 分数用于时间,因此 43283.5 是中午。只需格式化单元格而不是将值格式化为日期,一切都应该很好 - 单元格保存的值和它显示的内容可能会有很大的不同。
  • 你忘了在Paste部分设置Values而不是All
  • @JohnyL 我从没想过只选择Values。使用值将其转换为数字,但它仍然左对齐,所以肯定仍然被视为文本?当我选择 All 时,它会返回右对齐,这应该是数字的位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 2023-02-22
相关资源
最近更新 更多