В настоящее время вы используете макрос события Worksheet_SelectionChange , чтобы распознать, когда была выбрана полная строка. Вам необходим макрос события Worksheet_Change для Sheet2, чтобы распознавать, когда значения в диапазоне B1: B15 были изменены, и передавать изменения обратно в Sheet1.
Поскольку Worksheet_Change срабатывает при изменении значений, вам нужно отключить свойство Application.EnableEvents , чтобы оно не срабатывало при записи значений из Sheets1 Worksheet_SelectionChange к югу.
Вам потребуется пара открытых переменных. Один, чтобы запомнить положение, в которое должны быть возвращены изменения, и другой, чтобы найти целевые ячейки на Листе 2. Они могут быть опубликованы только в кодовом листе модуля.
Книга1 - Модуль1 (Код)
Option Explicit
Public Const sRNG As String = "B1:B15"
Public rRNG As Range
Я сделал несколько небольших модификаций для вашего исходного Worksheet_SelectionChange и добавил отключение обработки событий.
Книга1 - Лист1 (Код)
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count = Columns.Count And Target.Rows.Count = 1 And _
CBool(Application.CountA(Target)) Then '<~~ one complete non-blank row
On Error GoTo bm_Safe_Exit
Application.EnableEvents = False
With Sheet2.Range(sRNG)
Set rRNG = Target.Cells(1, 1).Resize(.Columns.Count, .Rows.Count)
.Cells = Application.Transpose(rRNG.Value)
End With
End If
bm_Safe_Exit:
Application.EnableEvents = True
End Sub
Свойство Worksheet .CodeName использовалось для идентификации Sheet2 , поскольку оно не меняется, если рабочий лист условно переименовывается.
Немного неясно, как вы планировали идентифицировать строку для возврата значений после их изменения. Я использовал открытую переменную типа диапазона, объявленную в Module1, чтобы записать последнее местоположение, в которое значения были перенесены из Sheet1 в Sheet2. Изменения на Листе 2 вернут их в последнее записанное место.
Книга1 - Лист2 (Код)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range(sRNG)) Is Nothing Then
Debug.Print rRNG.Address(0, 0, external:=True)
On Error GoTo bm_Safe_Exit
Application.EnableEvents = False
rRNG = Application.Transpose(Range(sRNG).Value)
End If
bm_Safe_Exit:
Application.EnableEvents = True
End Sub
Обратите внимание, что «запомненное» местоположение находится только в памяти. Закрытие и повторное открытие книги эффективно «обнуляет» ее. Не вносите изменения в Sheet2, если только вы не загрузили недавно значения из Sheet1.