2015-02-09 2 views
1

У меня возникают трудности с командой «ActiveCell.Row» в коде VBA, я знаю, что это должно быть простое исправление, но я провел некоторое исследование и не нашел ответа на мой проблема.Последняя активная строка ячейки

Код ниже получает номер строки следующей активной ячейки, а не ячейку, которую я редактировал.

Пример: Если я отредактирую ячейку «B2» и нажмите «Ввод», она вернет строку B3, потому что это будет текущая активная ячейка при запуске кода. Если я нажимаю вкладку, она возвращает правое число, которое равно «2», потому что активная ячейка будет «C2». И если я нажимаю стрелку вверх, она возвращает строку «1», потому что активная ячейка будет «B1».

Я ценю вашу помощь! Благодаря! (P.S. Я попытался решения, приведенные here и некоторые другие, которые я нашел, но без успеха)

Private Sub Worksheet_Change(ByVal Alvo As Range) 
    Dim limite_maximo As Integer 
    limite_maximo = 1000 
    If Alvo.Cells.Count > 1 Or IsEmpty(Alvo) Then Exit Sub 

    If Alvo.Column = 2 And Alvo.Row >= 1 And Alvo.Row <= limite_maximo Then 
     Application.EnableEvents = False 
     a = ActiveCell.Row - 5 
     b = 10 
     Alvo.Offset(0, 2).Value = b 
     Alvo.Offset(0, 3).Value = a 
     Alvo.Offset(0, 4).Value = b & "." & Format(a, "000000") 
     Application.EnableEvents = True 
    End If 

End Sub 
+2

'Alvo' - это ячейка (я), которая была/была изменена, поэтому вы должны использовать это, а не' activecell' – Rory

+1

'Alvo' - это диапазон ячейки, которую вы изменили. Поэтому используйте 'Alvo.Row', чтобы получить строку. –

+0

Удивительный чувак! я изменил линию = ActiveCell.Row а - 5 к а = Alvo.Row - 5 И теперь он отлично работает! Извините за вопрос новичков, но я действительно боролся с этим. Большое спасибо! –

ответ

0

В моих Excel Options, курсор перемещается вниз после ввода данных в ячейку.
Если я установлю:

Private Sub Worksheet_Change(ByVal Target As Range) 
    MsgBox Target.Row 
    MsgBox ActiveCell.Row 
End Sub 

и редактировать клетку B9, первый выход будет но второй выход будет 10.

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

0

получил его благодаря комментариям Paul Kelly и Rory

Я изменил линию «а = ActiveCell.Row - 5» до «а = Alvo.Row - 5», и теперь он работает отлично! Извините за вопрос новичков, но я действительно боролся с этим.

Спасибо!

Смежные вопросы