одновременный ввод до 2 клеток - PullRequest
0 голосов
/ 23 октября 2018

Я намерен создать рабочий лист в Excel с двумя ячейками в качестве входных данных.НапримерА2 один;и C2 - это пять. Отношение между A2: C2 = 1: 5. Отношение между C2: A2 = 1: 1/5. Есть ли способ написать скрипт для получения этих циклических отношений.В следующий раз, когда я набираю 2 в (A2), я вижу, что ячейка (C2) равна 10. Если я наберу 40 в (C2), я вижу 8 в (A2)

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы должны использовать как Worksheet_Change() (чтобы реагировать на конкретное изменение значения ячейки), так и Worksheet_SelectionChange() (чтобы поймать коэффициент до того, как произойдет какое-либо конкретное изменение значения ячейки) обработчики событий.

Таким образом поместитеследующее в области кода требуемого листа:

Dim ratio As Double

Private Sub Worksheet_Change(ByVal Target As Range)    
    On Error GoTo exitSub
    Application.EnableEvents = False
    Select Case Target.Address
        Case "$A$2"
            Range("C2").Value = ratio * Target.Value2
        Case "$C$2"
            Range("A2").Value = ratio * Target.Value2
    End Select

exitSub:
    Application.EnableEvents = True    
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)    
    Select Case Target.Address
        Case "$A$2"
            ratio = Range("C2") / Target.Value2
        Case "$C$2"
            ratio = Range("A2") / Target.Value2
    End Select    
End Sub
0 голосов
/ 23 октября 2018

Использование Worksheet_Change в закрытом кодовом листе рабочего листа (щелкните правой кнопкой мыши на вкладке имени рабочего листа, View Code).

Private Sub Worksheet_Change(ByVal Target As Range)

    'only A2 and C2
    'If Not Intersect(Range("A2, C2"), Target) Is Nothing Then
    'all of columns A and C
    If Not Intersect(Range("A:A, C:C"), Target) Is Nothing Then

        On Error GoTo safe_exit
        Application.EnableEvents = False
        Dim t As Range
        For Each t In Intersect(Range("A:A, C:C"), Target)
            select case t.column
                case 1
                    t.offset(0, 2) = 5 * t.value
                case 3
                    t.offset(0, -2) = t.value / 5
            end select
        Next t
    End If

safe_exit:
    Application.EnableEvents = true

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