какой макрос VBA дать дату, когда ячейка заполнена, но не когда происходит какое-либо событие - PullRequest
1 голос
/ 16 марта 2019

У меня есть файл Excel, который на самом деле является базой данных, которую я регулярно обновляю.Каждый раз, когда я делаю обновление, я хочу фильтровать данные, которые я ввел в этот конкретный день.

Таким образом, я нашел этот макрос в сети, который действительно подходит для моего приложения.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim C As Range, D As Range, Inte As Range, r As Range
    Set C = Range("C:C")
    Set Inte = Intersect(C, Target)
    If Inte Is Nothing Then Exit Sub
    Application.EnableEvents = False
        For Each r In Inte
            r.Offset(0, 1).Value = Date
        Next r
    Application.EnableEvents = True
End Sub

Я получаю в ячейке D дату дня, когда я изменил ячейку C. Проблема в том, что я хочу, чтобы дата появлялась только в том случае, если я действительно поместил текст в ячейку C. Иногда я просто вставляю строку, но пустую вячейка C, и макрос рассматривает это как событие.Затем он дает мне дату в ячейке D. Однако я ничего не написал.

Полагаю, это должна быть довольно простая строка для добавления где-то в макрос с If Not IsEmpty(C.Value) Then, но я не былв состоянии поставить его в нужное место, так как оно не работает ...

Заранее благодарю за любую помощь, которую вы можете получить.И всем хороших выходных!

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Используйте SpecialCells, чтобы действовать только на не пустые ячейки

И вам не нужно зацикливаться

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Inte As Range

    Set Inte = Intersect(Range("C:C"), Target)
    If Inte Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Inte.SpecialCells(xlCellTypeConstants).Offset(0, 1).Value = Date
    Application.EnableEvents = True
End Sub
0 голосов
/ 16 марта 2019

попробуй

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim C As Range, D As Range, Inte As Range, r As Range
    Set C = Range("C:C")
    Set Inte = Intersect(C, Target)
    If Inte Is Nothing Then Exit Sub
    Application.EnableEvents = False
        For Each r In Inte
        If Not IsEmpty(r.Value) Then  ' line added
        r.Offset(0, 1).Value = Date
        Else
        r.Offset(0, 1).Value = ""
        End If
        Next r
    Application.EnableEvents = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...