Excel, 2 листа, 2 столбца, одинаковое значение? - PullRequest
0 голосов
/ 26 января 2010

У меня есть 2 листа sheet1 и sheet2 в файле Excel 2007.

В sheet2 у меня есть столбец, который управляется формой / макросом (с управлением в виде дерева). Когда элемент выбран, ячейка заполняется знаком «x», а когда он не выбран, ячейка заполняется знаком «» (ничем).

В sheet1 я хочу создать столбец, равный столбцу sheet2. Например, если sheet2! C24 = "x", тогда sheet1! C24 также должен быть "x" Я также хотел бы, чтобы это работало в обоих направлениях. Если пользователь меняет sheet1! C24 на «x», тогда я хочу, чтобы sheet2! C24 принял то же значение.

Проблемы: - в Sheet1 я попытался sheet1! c24 = sheet2! c24, но тогда, когда sheet2! c24 = "", sheet1! c24 отображает 0 вместо ничего - в Sheet2 я попытался sheet2! c24 = sheet1! c24, но тогда в ячейках вместо значения ...

отображается формула (= 'sheet1! c24')

В общем, я хочу, чтобы независимо от того, что вы делаете, в sheet1 или sheet2, оба столбца в sheet1 и sheet2 обновляются ... Как мне этого добиться?

Ответы [ 3 ]

1 голос
/ 26 января 2010

У вас правильная идея, но вам, вероятно, нужно отключить события, прежде чем вносить изменения, иначе вы окажетесь в цикле

Private Sub worksheet_change(ByVal target As Range)
    application.enableevents = false
    sheet1.range("c24").value = sheet2.("c24").value
    application.enableevents = true
end sub

Просто убедитесь, что вы снова включили события в конце.

1 голос
/ 26 января 2010

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

Примерно так будет в модуле кода рабочего листа:

Private Sub worksheet_change(ByVal target As Range)
    Dim c As Range

    'Test to see if the cell just changed is
    'in the column we are interested in
    Set c = Application.Intersect(target, Range("A:A"))
    If Not c Is Nothing Then
        'Copy across to other sheet
        If Not beingEdited Then
            beingEdited = True
            Sheet1.Range(target.Address) = target.Value
            beingEdited = False
        End If
    End If
End Sub

Вам нужно было бы объявить переменную beingEdited где-нибудь в другом месте с большей областью действия, чтобы вы могли избежать запуска событий, а Excel застревать в цикле.

На другом листе у вас будет в основном та же процедура, за исключением того, что она будет ссылаться на первый лист, например Sheet1.Range(target.Address) = target.Value.

Очевидно, вам придется настроить это для ваших диапазонов / листов.

0 голосов
/ 26 января 2010

Я сделал что-то вроде этого, где у меня был сводный лист и лист испытаний. Когда я добавил новое значение в лист тестов, и оно прошло (P), ячейка в сводном листе будет сохранять приращение. Это для подсчета количества пройденных тестов. вот оно:

COUNTIF (тесты! $ C $ 5: $ C $ 1017, «P»);

надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...