Рассчитать только выбранную строку - PullRequest
0 голосов
/ 12 февраля 2019

У меня большая рабочая книга, и я пытаюсь повысить производительность.

Можно ли / целесообразно хранить мои формулы в каком-то списке, содержащемся в коде, а не в ячейках электронной таблицы?

Variable SelectedRow = the currently selected row

Например:

ColumnBFormula = A(SelectedRow) + 1
ColumnCFormula = A(SelectedRow) + 2

Если пользователь вводит 4 в ячейку A3, то макрос записывает формулы, приведенные выше, ТОЛЬКО в пустые ячейки B3 и C3, а затем преобразует их в значения.Остальная часть электронной таблицы остается неизменной (должны иметь значения везде).

Затем пользователь вводит 6 в ячейку A4, и электронная таблица записывает формулы в пустые ячейки B4 и C4, вычисляет их и затем преобразует в значения.

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Попробуйте:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Lastrow As Long

'Refer to Sheet1
With ThisWorkbook.Worksheets("Sheet1")

    'Check if Column A affected
    If Not Intersect(Target, Range("A:A")) Is Nothing And IsNumeric(Target) Then
        'Disable event to avoid event trigger
        Application.EnableEvents = False
            Target.Offset(0, 1).Value = Target + 1
            Target.Offset(0, 2).Value = Target + 2
        'Enable event
        Application.EnableEvents = True

    End If

End With

End Sub Инструкции:

enter image description here

Включить события:

enter image description here

0 голосов
/ 12 февраля 2019

Если вы знаете, что должен делать код, вы можете сделать это без ввода формул.

В редакторе VBA добавьте этот код в объект ThisWorkbook ...

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim objCell As Range

    Application.EnableEvents = False

    For Each objCell In Target.Cells
        If objCell.Column = 1 Then
            If objCell.Value = "" Then
                objCell.Offset(0, 1) = ""
                objCell.Offset(0, 2) = ""
            Else
                objCell.Offset(0, 1) = objCell.Value + 1
                objCell.Offset(0, 2) = objCell.Value + 2
            End If
        End If
    Next

    Application.EnableEvents = True
End Sub

Надеемся, что это работает для вас.

К вашему сведению - вам нужно добавить соответствующую проверку ошибок для значений, если не числовые и т. Д., То это нужно будет улучшить.

...