Предельная сумма значений и вычитаний - PullRequest
0 голосов
/ 25 марта 2020

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

Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Long
Dim b As Long
Dim Filament As Integer
Dim Remaining As Integer
Dim sumRemaning As Integer
a = 1
b = 1
'Add loop here for Filament
For b = 1 To 10
Filament = Cells(Target.Row("A"))
sumRemaining = 0
    Do While sumRemaining <= 90
        a = a + 1
        Remaining = Worksheets("Printer Log").Cells(a, 2)
        sumRemaining = sumRemaining + Application.WorksheetFunction.sum(Remaining)
    Loop
Cells(b, 3).Value = Filament - sumRemaining
Next b
End Sub

1 Ответ

0 голосов
/ 25 марта 2020

В этой строке произошла ошибка:

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.

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

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