Вставьте переменную текстовую строку (метку времени) в ячейку с помощью VBA - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь упростить процесс создания заметок в записях в электронной таблице.Я хочу вставить метку времени (с определенным форматом) в ячейку, а затем продолжить ввод заметок.

Это код, который у меня есть в 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) Я также хочу иметь возможность вернуться к этой ячейке позже и вставить новую метку времени ниже с дополнительными примечаниями.

Спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

У вас уже есть один ответ, и вот несколько иной подход:

Вы должны вставить его в модуль «Рабочий лист», где вы будете вводить заметки.

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, он будет делать это снова.Если вы вернетесь к ячейке, в которую уже набрали текст, она НЕ изменит временную метку, но ее можно будет легко отредактировать.

0 голосов
/ 18 мая 2018

Спасибо за ваш отзыв.Я решил следующий код:

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
0 голосов
/ 17 мая 2018

Если я понимаю вашу проблему, вы хотите запустить макрос во время редактирования ячейки. Это невозможно. Поэтому я хотел бы предложить обходной путь. Поместите это в свой модуль листа:

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

Если вам нужна временная метка, введите магический символ , которым вы никогда не будете пользоваться, но у вас по-прежнему есть легкий доступ к клавиатуре. В моем случае я выбрал «¤», но вы, вероятно, используете другую раскладку клавиатуры, поэтому выберите то, что вам подходит. Когда вы покидаете ячейку, магический персонаж заменяется временной меткой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...