Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2017, 01:32   #1
varikvn
Пользователь
 
Регистрация: 27.01.2017
Сообщений: 21
По умолчанию Автоматическая вставка статической даты

Здравствуйте уважаемые коллеги.
Разрабатываю журнал посещения студентами занятий, и столкнулся с задачей - что бы когда нужные поля были заполнены, в нужное мне поле записывалась текущая дата (что бы было понятно когда преподаватель заполнил журнал).

Сделал так:

=ЕСЛИ(И(K73<>"";K72<>"";K18<>"";K17 <>"");СЕГОДНЯ();"")

Проблема в том, что функция СЕГОДНЯ() - динамическая, и каждый раз обновляет дату.

Мне же нужно что бы автоматом подтягивалась текущая дата, записывалась в ячейку и не изменялась каждый день, а изменялась если
1. заполнены нужные поля
2. если какое-то из нужных мне полей было изменено.

Вариант с ручным вводом (по типу сочетания клавиш CTRL+; ) не подходит, т.к. преподаватели будут мухлевать и ставить какую-угодно дату

Надо чтоб подтягивалась дата из системных настроек ноутбука.

Как решить вопрос, не придумал

В приложенном файле даты записываются в ячейки: H74:T74
Вложения
Тип файла: xlsx Журнал_1.xlsx (62.6 Кб, 28 просмотров)
varikvn вне форума Ответить с цитированием
Старый 29.03.2017, 07:58   #2
китин
Пользователь
 
Регистрация: 27.03.2017
Сообщений: 12
По умолчанию

На что хватило знаний
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H73:T73")) Is Nothing Then
    If Target.Count > 1 Then Exit Sub
    If Target <> "" And Target.Offset(1, 0) = "" Then Target.Offset(1, 0) = Date
     
End If
If Not Intersect(Target, Range("H72:T72")) Is Nothing Then
    If Target.Count > 1 Then Exit Sub
    If Target <> "" And Target.Offset(2, 0) = "" Then Target.Offset(2, 0) = Date
    If Target = "" And Target.Offset(2, 0) = "" Then Target.Offset(2, 0) = ""
End If


End Sub
Вложения
Тип файла: xls Копия Журнал_1.xls (128.5 Кб, 23 просмотров)
Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
китин вне форума Ответить с цитированием
Старый 29.03.2017, 08:20   #3
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

У меня так получилось
Код:
Public x
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Range("H17:T18,H72:T73"), Target) Is Nothing Then Exit Sub
    x = Target.Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim col As Long: col = Target.Column
    If Target.Count > 1 Then Exit Sub
    If Intersect(Range("H17:T18,H72:T73"), Target) Is Nothing Then Exit Sub
    If Cells(17, col) <> "" And Cells(18, col) <> "" And _
        Cells(72, col) <> "" And Cells(73, col) <> "" And x <> Target.Value Then
        Cells(74, col) = Date
    Else '???
        Cells(74, col) = "" '???
    End If
End Sub
Строки с вопросами удалить, если после очистки любой из 4-х ячеек, удалять дату не нужно.
Вложения
Тип файла: rar Журнал_1_01.rar (57.0 Кб, 21 просмотров)
Алексей М.

Последний раз редактировалось AlexM12; 29.03.2017 в 09:04.
AlexM12 вне форума Ответить с цитированием
Старый 29.03.2017, 08:47   #4
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
Счастье

Игорь, я так понял, что дата нужна в одном месте, там где Сегодня():
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("K17:K18,K72:K73")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If Application.CountA(Range("K17:K18,K72:K73")) = 4 Then [d17] = Date
    End If
End Sub
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 29.03.2017, 09:02   #5
китин
Пользователь
 
Регистрация: 27.03.2017
Сообщений: 12
По умолчанию

Пока для меня это сложно
Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
китин вне форума Ответить с цитированием
Старый 29.03.2017, 09:09   #6
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

Сергей,
Цитата:
Сообщение от varikvn Посмотреть сообщение
даты записываются в ячейки: H74:T74
Я наверно Worksheet_SelectionChange сделал зря и без него будет работать.
Алексей М.

Последний раз редактировалось AlexM12; 29.03.2017 в 09:13.
AlexM12 вне форума Ответить с цитированием
Старый 29.03.2017, 17:02   #7
varikvn
Пользователь
 
Регистрация: 27.01.2017
Сообщений: 21
По умолчанию

Как всегда, огромное спасибо AlexM12, китин, kuklp,
что не оставили мой вопрос без внимания!
varikvn вне форума Ответить с цитированием
Старый 30.03.2017, 00:06   #8
varikvn
Пользователь
 
Регистрация: 27.01.2017
Сообщений: 21
По умолчанию

AlexM12, скажите, а если я в другом месте такого же рода правило захочу вставить (различие в том какие 4 ячейки проверяются, и куда вставлять "тек. дата"), что в коде мне нужно сделать? Я скопировал Ваш код, поменял интервалы на другие, и поменял переменную с Х на Y но оно не заработало...
Код:
Public x
Public y
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Range("H17:T18,H72:T73"), Target) Is Nothing Then Exit Sub
    x = Target.Value
End Sub
Private Sub Worksheet2_SelectionChange(ByVal Target As Range)
    If Intersect(Range("H17:T18,H76:T77"), Target) Is Nothing Then Exit Sub
    y = Target.Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim col As Long: col = Target.Column
    If Target.Count > 1 Then Exit Sub
    If Intersect(Range("H17:T18,H72:T73"), Target) Is Nothing Then Exit Sub
    If Cells(17, col) <> "" And Cells(18, col) <> "" And _
        Cells(72, col) <> "" And Cells(73, col) <> "" And x <> Target.Value Then
        Cells(74, col) = Date
    Else '???
        Cells(74, col) = "" '???
    End If
End Sub
Private Sub Worksheet2_Change(ByVal Target As Range)
    Dim col As Long: col = Target.Column
    If Target.Count > 1 Then Exit Sub
    If Intersect(Range("H17:T18,H76:T77"), Target) Is Nothing Then Exit Sub
    If Cells(17, col) <> "" And Cells(18, col) <> "" And _
        Cells(76, col) <> "" And Cells(77, col) <> "" And y <> Target.Value Then
        Cells(75, col) = Date
    Else '???
        Cells(75, col) = "" '???
    End If
End Sub

Последний раз редактировалось varikvn; 30.03.2017 в 00:26.
varikvn вне форума Ответить с цитированием
Старый 30.03.2017, 00:23   #9
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

Как писал выше скорее всего достаточно так
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim col As Long: col = Target.Column
    If Target.Count > 1 Then Exit Sub
    If Intersect(Range("H17:T18,H72:T73"), Target) Is Nothing Then Exit Sub
    If Cells(17, col) <> "" And Cells(18, col) <> "" And _
        Cells(72, col) <> "" And Cells(73, col) <> "" Then
        Cells(74, col) = Date
    End If
End Sub
В строке If Intersect(Range("H17:T18,H72:T73"), Target) Is Nothing Then Exit
Sub
указан диапазон.
Если изменение значения произошло в ячейках вне указанного диапазона, то макрос не выполняется.
Этот же диапазон можно указать так "H17:T17,H18:T18,H72:T72,H73:T7 3" Возможно вам так будет понятнее, чтобы сделать изменение диапазонов.
Дата вставляется строкой кода Cells(74, col) = Date 74 строка, col - столбец, где изменялось значение.
Если не получается, приложите пример.
Алексей М.
AlexM12 вне форума Ответить с цитированием
Старый 30.03.2017, 00:29   #10
varikvn
Пользователь
 
Регистрация: 27.01.2017
Сообщений: 21
По умолчанию

выше приложил пример что я сделал:
1. Добавил переменную Y
2. Скопировал обе функции, и изменил в них:
1 Название функций
2 Диапазоны значений
3 Назначение куда писать даты - было 74 стало 75
varikvn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
АВТОМАТИЧЕСКАЯ ВСТАВКА ДАННЫХ Айвенго Microsoft Office Access 24 15.03.2012 13:28
Проблема с взаимодействием динамической и статической памяти - обращение к статической переменной Comst95 Паскаль, Turbo Pascal, PascalABC.NET 1 03.01.2012 18:46
Автоматическая вставка нужного текста ogololobov2009 Microsoft Office Excel 1 16.03.2011 17:59
автоматическая вставка даты в нужном падеже mistx Microsoft Office Excel 14 06.11.2009 17:47
В развитие темы автоматическая вставка даты в нужном падеже ХочуЗнать Microsoft Office Excel 5 06.11.2009 16:15