【问题标题】:VBA macro toggles NumLockVBA 宏切换 NumLock
【发布时间】:2019-05-25 06:17:33
【问题描述】:

一个函数将timesatp插入到单元格中,代码如下:

CrationDate = Now
Cells(Cells(Rows.Count, "B").End(xlUp).Row + 1, 2).Value = CrationDate

由于我希望它具有正确的格式(因此它可以按月份和年份等日期过滤,而不是按值过滤,我添加了以下内容:

Dim i As String
i = "B" & Cells(Rows.Count, "B").End(xlUp).Row
Range(i).Select
SendKeys "{F2}"
SendKeys "{ENTER}"

但问题是,发送 {F2} 然后发送 {ENTER} 键的功能也会切换 NumLock,这非常烦人。任何想法为什么?

【问题讨论】:

  • 我不明白你的问题。它显示什么格式,你想要什么格式? SendKeys 非常不可靠。不建议使用它们。我确信这个问题可以在不使用 Sendkeys 的情况下得到纠正。但是,如果使用 Sendkeys 是不可避免的,那么我们可以采用 API 方式...
  • 如果手动按下F2-Enter 就可以了,那么您只需将Cells(Cells(Rows.Count, "B").End(xlUp).Row + 1, 2).Value = CrationDate 中的.Value 替换为.Formula,这样该行就变成了Cells(Cells(Rows.Count, "B").End(xlUp).Row + 1, 2).Formula = CrationDate

标签: excel vba timestamp


【解决方案1】:

使用NumberFormat 对象的Range 属性

With Cells(Cells(Rows.Count, "B").End(xlUp).Row + 1, 2)
    .NumberFormat = "m/d/yyyy h:mm"
    .Value = Now
End With

【讨论】:

  • @user2602342,有什么反馈吗?同时希望勇敢的蒙面投票者用他的智慧和知识启发我们,帮助我提高答案
  • 我不是反对者,但我建议您先更改数字格式。如果它被设置为文本,否则你仍然会得到一个文本值。
  • @Rory,感谢您的评论,但在我的测试中,以前“文本”格式的戴尔的行为方式相同
  • 我也没有投反对票,但我猜有人会投反对票的原因是因为你的帖子没有解释它的作用:) 顺便说一句,我同意@Rory。如果单元格已格式化为文本,则执行此.NumberFormat = "m/d/yyyy h:mm",然后执行.Formula = Now 而不是.Value,这与F2-Enter 相同
  • @DisplayName 我觉得这不太可能。它当然不适用于我拥有的任何版本的 Excel。单元格内容仍然是文本,无论您应用什么数字格式(您的数字格式恰好与默认情况下 VBA 将作为文本放入单元格中的内容相匹配,因此请尝试将 numberformat 字符串更改为其他内容)
猜你喜欢
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 2018-04-11
相关资源
最近更新 更多