В этой строке произошла ошибка:
Filament = Cells(Target.Row("A"))
Причина в том, что вы пытались присвоить Range целое число; это два разных типа данных. Если вы хотите получить сумму всех значений в столбце A, вы можете использовать функцию SUM на рабочем листе (см. Ниже).
Функция ниже будет:
- получить все значения в столбце A из Sheet1 (iValue1)
- получить значение в ячейке A2 из Sheet2 (iValue2)
- вычесть iValue2 из iValue1
получает результат и выводит это в ячейку B3 на листе 1.
Private Sub Worksheet_Change(ByVal Target As Range)
If (Cells(3, 2).Value = "") Then 'cell C2. 'when you use .Cell you reference the column first, THEN the row. You can substitute a string value for the column integer but it is less effecient.
Dim iValue1 As Integer 'do not use a capital letter at the beginning of an integer variable. By convention variables begin with a lowercase letter.
Dim iValue2 As Integer
Dim iResult As Integer
iValue1 = Application.WorksheetFunction.Sum(Sheets("Sheet1").Range("A:A")) 'you need to use Application.WorksheetFunction.Sum here
If (iValue1 > 90) Then iValue1 = 90 'make sure sum of A column is not greater than 90. You don't need a loop to do this.
iValue2 = Sheets("Sheet2").Cells(2, 1).Value
iResult = (iValue1 - iValue2)
Sheets("Sheet1").Cells(3, 2).Value2 = iResult
End If
End Sub
Обратите внимание, что в начале подпрограммы имеется условие оценки; это удерживает саб от повторного запуска. Вы можете сделать это следующим образом и нажать «очистить содержимое» в ячейке B3 (выходная ячейка), чтобы запустить его снова. В качестве альтернативы вы можете создать кнопку на своем листе для запуска этого действия (рекомендуется) вместо использования Sub Sub Worksheet_Change.
Надеюсь, это то, что вы искали. Если вы хотите вычесть значения из одного листа вместо другого, вы можете просто поменять местами переменные.