Страницы: 1
RSS
При изменения значения изменять значение другой ячейки, ошибка с target
 
Есть желание сделать в таблице следующее.
При изменении значения ячейки в столбце 18 с "пусто" на значение даты. Изменять значение ячейки в столбце "H" в этой же строке.

Покурил форумы. И получился некий код. Что-то даже получилось. Но! Почему-то изменения в столбце "H" происходят только в случае если после нажатия Enter, вернуться обратно в только что отредактированную ячейку. Далее моих знаний не хватает ))
Прошу помощи.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
        If Not Intersect(Target, Range("R:R")) Is Nothing Then
            If Target.Column = 18 And Target.Value <> "" Then
                Application.EnableEvents = False   '
                    
                    With Target.Offset(0, -10)   
                        .Value = "Оплачена"   
                    End With
            
                Application.EnableEvents = True   
            End If
        End If

End Sub
 
При изменении значения<>Worksheet_SelectionChange
Да и проверять два раза что ячейка в нужном столбце - явно излишне.
Изменено: Hugo - 15.04.2015 09:55:40
 
Цитата
Hugo написал: При изменении значения<>Worksheet_SelectionChange
Не очень понял по первому предложению.
 
я так думаю что Hugo, сказал что событие изменения значения ячейки не является событием изменения выделенного диапазона  
Лень двигатель прогресса, доказано!!!
 
У вас код повешен на событие Worksheet_SelectionChange - т.е. на изменение ВЫДЕЛЕНИЯ. Поэтому, когда вы вводите данные, потом жмакаете Enter выделение изменяется на след.ячейку. Код отрабатывает, а ячейка не та. А потом вы выделяете ту ячейку - и код отрабатывает как хочется.
А надо вешать на событие Worksheet_Change - т.е. на изменение на листе. Тогда, при жмаканьи Enter'а, код будет работать не с ячейкой, которая стала активной, а с ячейкой, в которой произошли изменения.
Кому решение нужно - тот пример и рисует.
 
...
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("R:R") Is Nothing Then   '100
With Application
.EnableEvents = False
  If IsDate(Target) Then                                '101
    If Target.Value <> "" Then                          '102
    Target.Offset(0, -10).Value = "Оплачена"
    End If                                              '102
  Else                                                  '101
  MsgBox "Введите дату!!!"
  .Undo
  End If                                                '101
.EnableEvents = True
End With
End If                                                  '100
End Sub
 
Спасибо! Всё получилось.
 
Добрый день.
Прошу помочь дописать макрос чтобы при любом изменении ячейки B2 он запускался
Sub ColumnB()

   Dim i As Integer, lastrow As Integer

   lastrow = 100

       With ThisWorkbook.ActiveSheet

           .Range("B1:B" & lastrow).Rows.EntireRow.Hidden = False

           For i = 1 To lastrow Step 1

               If .Range("B" & i) = " " Then

                   .Range("B" & i).EntireRow.Hidden = True

               End If

           Next

       End With

End Sub

 
Sashap, код следует оформлять соответствующим тегом. Ищите такую кнопку.
И какое отношение Ваш вопрос имеет к ЭТОЙ теме?
Страницы: 1
Наверх