Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Автоматическая вставка даты и времени - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматическая вставка даты и времени (Макросы/Sub)
Автоматическая вставка даты и времени
w00t Дата: Понедельник, 29.02.2016, 13:06 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 3 ±
Замечаний: 0% ±

Здравствуйте. Избитая тема, но, помогите, пожалуйста, немного модифицировать (да, обращение к листу по Codename, если в чистой книге, то вместо Vvod_dannyh.Columns(3) тот же Worksheets(1). Columns(3))
Чтобы в соседнюю с датой ячейку (,-1) добавлялся (или удалялся, если дата отсутствует) номер недели основанный на дате, которую макрос добавляет. Номер недели, который если формулой
Код
=номнедели (ячейка;2)

И действие распространялось бы только с 5 строки, что вставка номера недели, что даты?

+ если в третьем столбе значение просто меняется, а не удаляется или вводится заново - то не трогать дату. Т.к. обычно в третьем столбце значение выбирается из раскрывающегося списка, и если вдруг его не удалять и новое выбрать - а просто заменить выбором нового из списка - то дата бы осталась прежняя?

Спасибо.

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rInt As Range, rCel As Range
    
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Set rInt = Intersect(Target, Vvod_dannyh.Columns(3))
    
    If Not rInt Is Nothing Then
        For Each rCel In rInt
            rCel.NumberFormat = "0"
            If rCel = Empty Then
                rCel.Offset(, -2) = Empty
            Else
                rCel.Offset(, -2) = Now()
                rCel.Offset(, -2).NumberFormat = "dd.mm.yyyy hh:mm:ss"
            End If
        Next
    End If
    
    Set rInt = Nothing
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
[/vba]


Сообщение отредактировал w00t - Понедельник, 29.02.2016, 13:17
 
Ответить
СообщениеЗдравствуйте. Избитая тема, но, помогите, пожалуйста, немного модифицировать (да, обращение к листу по Codename, если в чистой книге, то вместо Vvod_dannyh.Columns(3) тот же Worksheets(1). Columns(3))
Чтобы в соседнюю с датой ячейку (,-1) добавлялся (или удалялся, если дата отсутствует) номер недели основанный на дате, которую макрос добавляет. Номер недели, который если формулой
Код
=номнедели (ячейка;2)

И действие распространялось бы только с 5 строки, что вставка номера недели, что даты?

+ если в третьем столбе значение просто меняется, а не удаляется или вводится заново - то не трогать дату. Т.к. обычно в третьем столбце значение выбирается из раскрывающегося списка, и если вдруг его не удалять и новое выбрать - а просто заменить выбором нового из списка - то дата бы осталась прежняя?

Спасибо.

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rInt As Range, rCel As Range
    
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Set rInt = Intersect(Target, Vvod_dannyh.Columns(3))
    
    If Not rInt Is Nothing Then
        For Each rCel In rInt
            rCel.NumberFormat = "0"
            If rCel = Empty Then
                rCel.Offset(, -2) = Empty
            Else
                rCel.Offset(, -2) = Now()
                rCel.Offset(, -2).NumberFormat = "dd.mm.yyyy hh:mm:ss"
            End If
        Next
    End If
    
    Set rInt = Nothing
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - w00t
Дата добавления - 29.02.2016 в 13:06
Manyasha Дата: Понедельник, 29.02.2016, 13:21 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 1997
Репутация: 829 ±
Замечаний: 0% ±

Excel 2010, 2016
w00t, так пойдет?
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rInt As Range, rCel As Range
    
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Set rInt = Intersect(Target, Range("c5:c" & Rows.Count))
    
    If Not rInt Is Nothing Then
        For Each rCel In rInt
            rCel.NumberFormat = "0"
            If rCel = Empty Then
                rCel.Offset(, -2).Resize(, 2) = Empty
            Else
                If rCel.Offset(, -2) = "" Then
                    rCel.Offset(, -2) = Now()
                    rCel.Offset(, -2).NumberFormat = "dd.mm.yyyy hh:mm:ss"
                    rCel.Offset(, -1) = WorksheetFunction.WeekNum(rCel.Offset(, -2))
                End If
            End If
        Next
    End If
    
    Set rInt = Nothing
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
[/vba]

[p.s.]Vvod_dannyh в Vvod_dannyh.Columns(3) - зачем, если код в модуле листа?[/p.s.]


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеw00t, так пойдет?
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rInt As Range, rCel As Range
    
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Set rInt = Intersect(Target, Range("c5:c" & Rows.Count))
    
    If Not rInt Is Nothing Then
        For Each rCel In rInt
            rCel.NumberFormat = "0"
            If rCel = Empty Then
                rCel.Offset(, -2).Resize(, 2) = Empty
            Else
                If rCel.Offset(, -2) = "" Then
                    rCel.Offset(, -2) = Now()
                    rCel.Offset(, -2).NumberFormat = "dd.mm.yyyy hh:mm:ss"
                    rCel.Offset(, -1) = WorksheetFunction.WeekNum(rCel.Offset(, -2))
                End If
            End If
        Next
    End If
    
    Set rInt = Nothing
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
[/vba]

[p.s.]Vvod_dannyh в Vvod_dannyh.Columns(3) - зачем, если код в модуле листа?[/p.s.]

Автор - Manyasha
Дата добавления - 29.02.2016 в 13:21
w00t Дата: Понедельник, 29.02.2016, 13:34 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 3 ±
Замечаний: 0% ±

Да, спасибо большое!

Vvod_dannyh в Vvod_dannyh.Columns(3) - зачем, если код в модуле листа?

"Понедельник день тяжелый" )
 
Ответить
СообщениеДа, спасибо большое!

Vvod_dannyh в Vvod_dannyh.Columns(3) - зачем, если код в модуле листа?

"Понедельник день тяжелый" )

Автор - w00t
Дата добавления - 29.02.2016 в 13:34
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматическая вставка даты и времени (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!