2

первый раз слушатель, первый раз звонящий. Я лесник, пытающийся создать шаблон бизнес-плана, используя Excel для других подобных людей. Хотите создать таблицу с двусторонними связями, которая отображается на каждом листе.

Проблема: я хочу облегчить просмотр и манипулирование несколькими основными предположениями / переменными при переходе от листа к листу (Acres, Yield и т.д.). Вместо того чтобы переключаться между рабочими листами или общими представлениями, я хочу, чтобы эти предположения отображались на каждом листе в рабочей книге / документе. Я хочу иметь возможность манипулировать ими на ЛЮБОМ из листов, а не только на исходном листе.

Это были бы двусторонние связи (то есть не просто ссылка на именованную ячейку из исходного листа). Ячейки будут связываться от исходного листа до всех целевых листов. Каждой ячейкой можно управлять на любом листе, а не только на исходном листе.

На странице это может выглядеть так: одна и та же маленькая таблица в одном и том же месте на каждом листе. Или это могут быть первые два столбца на каждом листе.

Это возможно? Требуется ли для этого решение VBA.

(Я знаю, как назвать ячейки и связать между листами - не проблема. Я также знаю, как просматривать несколько окон одновременно - не то решение, которое мне нужно.)

Извиняюсь за любые нарушения этикета.

1 ответ1

1

Так что это пример того, как вы теоретически можете настроить его с помощью макроса.

У меня есть таблица в диапазоне A1:D5 включая заголовки, которые я скопировал в одно и то же место на трех листах.
Затем я добавляю следующий код на каждый лист, щелкнув правой кнопкой мыши вкладку листа и выбрав "показать код".

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range(Target.Address), Range("A2:D5")) Is Nothing Then
    Application.EnableEvents = False
    Sheets(1).Range(Target.Address).Value = Target
    Sheets(2).Range(Target.Address).Value = Target
    Sheets(3).Range(Target.Address).Value = Target
    Application.EnableEvents = True
End If
End Sub

Вот скриншот того, как это выглядит:

Таким образом, Worksheet_Change проверяет любые изменения, внесенные в лист.
Сначала я скажу, чтобы он смотрел только на изменения, внесенные в таблицу Range("A2:D5") , в примере не указан заголовок.
Затем я устанавливаю значение этой же ячейки на каждом листе на новое значение.
Очевидно, что установка значения на исходном листе является излишней, но это просто для того, чтобы просто иметь возможность копировать и запускать один и тот же код на всех листах.

Наконец Application.EnableEvents = False предотвращает любые изменения, сделанные макросом, чтобы вызвать подпрограмму Worksheet_Change . Как это закончилось бы в бесконечном цикле.

Стол в действии:

РЕДАКТИРОВАТЬ

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

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
If Not Application.Intersect(Range(Target.Address), Range("A2:D5")) Is Nothing Then
    Application.EnableEvents = False
    For i = 1 To Worksheets.Count
        Sheets(i).Range(Target.Address).Value = Target
    Next i
    Application.EnableEvents = True
End If
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .