Новости:

Новая редакция правил форума: 2.4. Если вопрос или ответ содержится во вложенном файле, все-равно кратко описывайте в сообщении вопрос или суть решения. Это необходимо, чтобы тему можно было найти через поиск.

Главное меню

Копирование данных на другой лист при условии изменения значения в ячейке

Автор Oleg Pronin, 08.03.2018, 20:14

« назад - далее »

Oleg Pronin

Подскажите пожалуйста как в VBA сделать копирование определённых значений в строчке и значения в подшапке при условии что значение в данной строчке в колонке ПОСЛ.ЗАМЕНА изменится. Копироваться должно на другой лист в определённом порядке в пустую ниже строчку. Такой ЛОГ лист своего рода.
Табличку прилагаю.

boa

листинг модуля листа "обслуживание"

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
'Worksheet_Change - событие листа которое происходит после изменения в ячейке
    If Target.Count > 1 Then Exit Sub   'если изменения произошли более чем в 1 ячейке, то выходим
    Dim iRow&: iRow = Target.Row
    Dim iCol&: iCol = Target.Column

    If iCol = 1 Or iCol = 5 Then    'выберите сами какие колонки мониторятся
        With ThisWorkbook.Sheets("история замен")
        'в Юнионе перечислите ячейки которые должны быть скопированы
            Application.Union(Cells(iRow, 12), Cells(iRow, 4)).Copy .Range("A" & .Range("A1").End(xlDown).Row + 1)
        End With
    End If
End Sub
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Oleg Pronin


boa

Здравствуйте, 
подправил в своем сообщении.
Извините, не проверил, когда выкладывал
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Oleg Pronin

что же может быть, доверие в безопасности макроса выставлено.

boa

Даже не знаю что у вас за баг  :-\
попробуйте прописать все объекты явно

Option Explicit

' листинг [abbr=правой кнопкой мыши по ярлычку листа -> Исходный текст]модуля листа[/abbr] "обслуживание"
Private Sub Worksheet_Change(ByVal Target As Range)
'Worksheet_Change - событие листа которое происходит после изменения в ячейке
    If Target.Count > 1 Then Exit Sub   'если изменения произошли более чем в 1 ячейке
    Dim iRow&: iRow = Target.Row
    Dim iCol&: iCol = Target.Column

If iCol = 1 Or iCol = 5 Then    'выберите сами какие колонки мониторятся
    With ThisWorkbook.Sheets("история замен")
    'в Юнионе перечислите ячейки которые должны быть скопированы
        Excel.Application.Union(Me.Cells(iRow, 12), Me.Cells(iRow, 4)).Copy .Cells(.Columns(1).End(xlDown).Row + 1, 1)
    End With
End If
End Sub

Кстати, какая у вас версия Excel?

Прикладываю ваш файл с рабочим кодом.
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра