我正在尝试简化在电子表格中记录记录的过程。我想在单元格中插入时间戳(具有特定格式),然后继续键入注释。
这是我在VBA中的代码:
Sub timestamp()
Dim stringdate As String
Dim stringtime As String
Dim stamp As String
stringdate = Format(Now(), "mm/dd/yy")
stringtime = Format(Now(), "hh:mmA/P")
stamp = stringdate & " @" & stringtime & " KB- "
Selection.Value = stamp
'SendKeys "{F2}" /// not working
End Sub
这会以我想要的格式插入时间戳,但我有两个问题。 (1)我需要能够在插入文本后继续键入并且sendkeys不起作用。 (2)我还希望能够在以后导航回该单元格,并在下面添加更多笔记的新时间戳。
感谢您的帮助!
答案 0 :(得分:1)
如果我了解您的问题,您希望在编辑单元格时运行宏。那是不可能的。所以我想提供一个解决方法。 把它放在你的图纸模块中:
Const MAGIC_CHARACTER = "¤"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim stringdate As String
Dim stringtime As String
Dim stamp As String
Application.EnableEvents = False
stringdate = Format(Now(), "mm/dd/yy")
stringtime = Format(Now(), "hh:mmA/P")
stamp = stringdate & " @" & stringtime & " KB- "
Target.Value = Replace(Target.Value, MAGIC_CHARACTER, stamp)
Application.EnableEvents = True
End Sub
当您需要时间戳时,请输入魔术角色,这必须是您永远不会使用的东西,但您仍然可以轻松访问键盘。在我的情况下,我选择“¤”,但你可能使用不同的键盘布局,所以选择适合你的东西。离开单元格后,魔术字符将替换为时间戳。
答案 1 :(得分:0)
你已经有了一个答案,这是一个有点不同的方法:
您必须将其粘贴到您将键入注释的工作表模块中。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim tAddress As Variant
tAddress = Split(Target.Address, "$")
If tAddress(1) = "B" And tAddress(2) > 1 Then
If Cells(tAddress(2), 1).Value = "" Then Cells(tAddress(2), 1) = Format(Now(), "mm/dd/yy: h:mm:ss AM/PM")
Application.SendKeys "{F2}", False
End If
End Sub
无论何时选择B列中的任何单元格(B1除外),如果A列旁边的单元格为空白,它将为其添加时间戳并激活单元格,以便您可以在其上键入。无论何时移动到B列中的下一个单元格,它都会再次执行。如果您回到已经输入的单元格,它将不会更改时间戳,但可以轻松编辑它。
答案 2 :(得分:0)
感谢您的反馈。我决定使用以下代码:
Sub MyTimestamp()
'
' MyTimestamp Macro
' Insert KB Date/Time stamp into cell
'
' Keyboard Shortcut: Ctrl+Shift+D
Dim stringdate As String
Dim stringtime As String
Dim stamp As String
Dim current_value As String
stringdate = Format(Now(), "mm/dd/yy")
stringtime = Format(Now(), "hh:mmA/P")
stamp = stringdate & " @" & stringtime & " KB- "
current_value = Selection.Value
If current_value = "" Then
Selection.Value = current_value & stamp
Else: Selection.Value = current_value & Chr(10) & stamp
End If
Application.Wait (Now() + TimeValue("00:00:01"))
SendKeys "{f2}", True
End Sub