Страницы: 1
RSS
Несколько макросов на листе, на одном листе два три и четыре макроса
 
Господа подскажите можно ли использовать на одном листе два три и четыре макроса

по вставке даты например мне надо при нажатии любой кнопки в столбике A в столбик B вставлять текущую дату

при помощи макроса ниже, как сделать так чтобы на этом же листе принажатии столбик А вставка была в В , затем при нажатии скажем D вставка была в E


Private Sub Worksheet_Change(ByVal Target As Range)
 
  For Each cell In Target   'проходим по всем измененным ячейкам
     If Not Intersect(cell, Range("A2:A100")) Is Nothing Then  'если изменененная ячейка попадает в диапазон A2:A100
          With cell.Offset(0, 2)         'вводим в соседнюю справа ячейку дату
             .Value = Time
             .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
          End With
     End If
  Next cell
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
 
  For Each cell In Target   'проходим по всем измененным ячейкам
     If Not Intersect(cell, Range("D2:D100")) Is Nothing Then  'если изменененная ячейка попадает в диапазон D2:D100
          With cell.Offset(0, 2)         'вводим в соседнюю справа ячейку дату
             .Value = Time
             .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
          End With
     End If
  Next cell
End Sub

расположив два макроса подряд выдаёт ошибку
 
Владислав, оформите код кнопкой <…> на панели
Код
Чтобы выглядел так
Изменено: Jack Famous - 09.08.2022 09:15:11
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Код в модуль листа 1:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub 'если выделена не одна ячейка - выход из процедуры

Rem если измененная ячейка попадает в диапазон A2:A100
If Not Intersect(Target, Range("A2:A100")) Is Nothing Then
    With Target.Offset(0, 1) 'вводим в соседнюю справа ячейку дату
        .Value = Time
        .EntireColumn.AutoFit 'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
    End With
End If

Rem если измененная ячейка попадает в диапазон D2:D100
If Not Intersect(Target, Range("D2:D100")) Is Nothing Then
    With Target.Offset(0, 1) 'вводим в соседнюю справа ячейку дату
        .Value = Time
        .EntireColumn.AutoFit 'выполняем автоподбор ширины для столбца E, чтобы дата умещалась в ячейке
    End With
End If

End Sub

ps исправьте Ваше первое сообщение согласно рекомендации Jack Famous

вот ВИДЕО ИНСТРУКЦИЯ как это сделать
Изменено: Конь - 09.08.2022 09:59:21
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Наверное достаточно так
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub 'если выделена не одна ячейка - выход из процедуры
    
    Rem если изменененная ячейка попадает в диапазон A2:A100 или D2:D100
    If Not Intersect(Target, Range("A2:A100,D2:D100")) Is Nothing Then
        With Target.Offset(0, 1) 'вводим в соседнюю справа ячейку дату
            .Value = Time
            .EntireColumn.AutoFit 'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
        End With
    End If
End Sub
 
Цитата
написал:
Владислав, оформите код кнопкой <…> на панели
Код
    [URL=#]?[/URL]       1      Чтобы выглядел так   
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
 
  For Each cell In Target   'проходим по всем измененным ячейкам
     If Not Intersect(cell, Range("A2:A100")) Is Nothing Then  'если изменененная ячейка попадает в диапазон A2:A100
          With cell.Offset(0, 2)         'вводим в соседнюю справа ячейку дату
             .Value = Time
             .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
          End With
     End If
  Next cell
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
 
  For Each cell In Target   'проходим по всем измененным ячейкам
     If Not Intersect(cell, Range("D2:D100")) Is Nothing Then  'если изменененная ячейка попадает в диапазон D2:D100
          With cell.Offset(0, 2)         'вводим в соседнюю справа ячейку дату
             .Value = Time
             .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
          End With
     End If
  Next cell
End Sub
 
Владислав, Вас просили изменить первое сообщение, а не повторить его снова. Внизу (у первого сообщения) есть кнопочка "Изменить", нажмите и проделайте тоже самое  ;).
Конь не полную инструкцию снял  :D
Изменено: Msi2102 - 09.08.2022 09:55:49
 
Владислав,
оформить нужно было первое сообщение, а не добавить новое
а вообще смотрите сообщение 4 и ничего уже больше оформлять, добавлять не нужно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
Наверное достаточно так
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11      Private   Sub   Worksheet_Change(  ByVal   Target   As   Range)          If   Target.Count > 1   Then   Exit   Sub   'если выделена не одна ячейка - выход из процедуры                   Rem если изменененная ячейка попадает в диапазон A2:A100 или D2:D100          If   Not   Intersect(Target, Range(  "A2:A100,D2:D100"  ))   Is   Nothing   Then              With   Target.Offset(0, 1)   'вводим в соседнюю справа ячейку дату                  .Value = Time                  .EntireColumn.AutoFit   'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке              End   With          End   If    End   Sub   
 
Скажите пожалуйста а возможно ли прописать в макросе одного листа чтобы при нажатии кнопки  в столбце A  в столбец B проставлялось время, а при нажатии кнопки в столбце D в столбец E проставлялась дата и время (NOW) ?  Как организовать этот макрос или 2 макроса на одном листе. Спасибо.
 
Цитата
написал:
Владислав,
оформить нужно было первое сообщение, а не добавить новое
а вообще смотрите сообщение 4 и ничего уже больше оформлять, добавлять не нужно
Простите я только учусь, буду внимательнее
 
Цитата
Владислав написал:
или 2 макроса на одном листе.
Не может быть два макроса события "Worksheet_Change".
Цитата
Владислав написал:
чтобы при нажатии кнопки
, Worksheet_Change это событие наступает при изменении ячейки. Почитайте ТУТ
Цитата
Владислав написал:
в столбце A  в столбец B проставлялось время, а при нажатии кнопки в столбце D в столбец E проставлялась дата и время (NOW)
Если у Вас действия при изменении ячеек в столбцах A и D разные, то Возьмите макрос Коня из 3-его сообщения и меняйте строку .Value = Time, на то, что Вам нужно
 
Цитата
написал:
Цитата
Владислав написал:
или 2 макроса на одном листе.
Не может быть два макроса события "Worksheet_Change".  
Цитата
Владислав написал:
чтобы при нажатии кнопки
, Worksheet_Change это событие наступает при изменении ячейки. Почитайте  ТУТ  
Цитата
Владислав написал:
в столбце A  в столбец B проставлялось время, а при нажатии кнопки в столбце D в столбец E проставлялась дата и время (NOW)
Если у Вас действия при изменении ячеек в столбцах A и D разные, то Возьмите макрос Коня из 3-его сообщения и меняйте строку  .Value = Time , на то, что Вам нужно
 
Цитата
написал:
Цитата
написал:
 
Цитата
Владислав  написал:
или 2 макроса на одном листе.
 Не может быть два макроса события "Worksheet_Change".  
Цитата
Владислав  написал:
чтобы при нажатии кнопки
 , Worksheet_Change это событие наступает при изменении ячейки. Почитайте   ТУТ    
Цитата
Владислав  написал:
в столбце A  в столбец B проставлялось время, а при нажатии кнопки в столбце D в столбец E проставлялась дата и время (NOW)
 Если у Вас действия при изменении ячеек в столбцах A и D разные, то Возьмите макрос Коня из 3-его сообщения и меняйте строку  .Value = Time , на то, что Вам нужно
Конь выдаёт ошибку
 
Цитата
Владислав написал:
Конь выдаёт ошибку
из Сообщения №3 и не нужно цитировать полностью сообщение, сейчас придут модераторы и будут ругаться
Изменено: Msi2102 - 09.08.2022 12:54:01
 
Цитата

из  Сообщения №3
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub 'åñëè âûäåëåíà íå îäíà ÿ÷åéêà - âûõîä èç ïðîöåäóðû
    
    Rem åñëè èçìåíåíåííàÿ ÿ÷åéêà ïîïàäàåò â äèàïàçîí A2:A100 èëè D2:D100
    If Not Intersect(Target, Range("A5:A1000,M5:M1000,U5:U1000,AD5:AD1000")) Is Nothing Then
        With Target.Offset(0, 2) 'ââîäèì â ñîñåäíþþ ñïðàâà ÿ÷åéêó äàòó
            .Value = Time
            .EntireColumn.AutoFit 'âûïîëíÿåì àâòîïîäáîð øèðèíû äëÿ ñòîëáöà B, ÷òîáû äàòà óìåùàëàñü â ÿ÷åéêå
        End With
    End If

End Sub
Сделал так, всё работает, но мне как-то нужно чтобы при нажатии в  U5:U1000 в соседнюю или через одну ячейку неважно вставлялась именно дата со временем.

На одном листе этого не организовать?  
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub
  If Not Intersect(Target, Range("A5:A1000,M5:M1000,U5:U1000,AD5:AD1000")) Is Nothing Then
    With Target.Offset(0, 2)
      .Value = Time: .EntireColumn.AutoFit 
    End With
  End If
  If Not Intersect(Target, Range("U5:U1000")) Is Nothing Then Target.Offset(0,1) = Now
End Sub
Изменено: Ігор Гончаренко - 09.08.2022 13:13:52
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Спасибо, огромное!
возможно ли в рамках данной темы задать ещё пару вопросов

1. Как и где и на каком языке Вы пишите макросы. Хочу научиться.
2. Как при открытии файла EXCEL (Даты календаря проставлены в столбик на весь год и скажем сегодня дата 9 августа стоит в столбике А и строке 253 например) Дата у меня по правилу отмечается цветом, но хотелось бы ещё чтобы при открытии файла не нужно было пролистывать 253 строки до сегодняшней даты а файл открывался бы на нужной строчке :) Спасибо.
 
Цитата
Владислав: Как и где и на каком языке Вы пишите макросы. Хочу научиться
язык VBA, курите форум, пробуйте писать, задавайте вопросы
Цитата
Владислав: Как при открытии файла … не нужно было пролистывать 253 строки … открывался бы на нужной строчке
Макрос на событие открытия книги
если что непонятно - создавайте новую тему по новому вопросу
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Владислав,  посмотрите на свои #11 и#12 - 'это же безобразие, а не сообщения? Цитируйте только то, на чём хотите сделать акцент, а то у Вас не цитаты, а полные копии предыдущих сообщений.
Не цитируйте код - посмотрите на #8 - код читабельный?
И не растягивайте сообщения: не пишите через строку (#1). И код в нём оформите тегом.
Косяк на косяке...
Страницы: 1
Наверх