Применить подпроцедуру к двум столбцам таблицы - PullRequest
1 голос
/ 11 июня 2019

У меня есть таблица данных, где один столбец - это Units, один столбец - это UnitCost, а столбец, который не существует, и который я бы хотел заполнить, - Total.

Я бы хотел умножить Units наUnitCost для заполнения каждой строки в Total.

Я получаю сообщение об ошибке:

«Переменная объекта или переменная блока не установлена»

Здесьмой код:

Private Sub CommandButton7_Click()
Dim Units As Range, UnitCost As Range, Total As Range
Units = Worksheets("Sheet1").Range("E2:E44").Value
UnitCost = Worksheets("Sheet1").Range("F2:F44").Value
Total = Units * UnitCost
Range("H2:H44").Value = Total
End Sub

Нужно ли менять типы данных с диапазона на удвоение?

1 Ответ

1 голос
/ 11 июня 2019

У вас есть несколько вещей, которые нужно исправить. В дополнение к приведенному выше комментарию @ Damian кажется, что вы пытаетесь использовать массивы на основе памяти вместе с диапазонами. Это прекрасно, но вы не делали различий между Range и массивом. Затем вы пытаетесь умножить два целых диапазона (или массива), используя Total = Units * UnitCost. Это тоже не сработает.

В этом примере кода показано, как четко определить используемые переменные, а как вы их используете. Не забудьте всегда использовать Option Explicit.

Option Explicit

Private Sub CommandButton7_Click()
    Dim unitsArea As Range
    Dim unitsData As Variant
    Set unitsArea = Sheet1.Range("E2:E44")
    unitsData = unitsArea

    Dim unitCostArea As Range
    Dim unitCostData As Variant
    Set unitCostArea = Sheet1.Range("F2:F44")
    unitCostData = unitCostArea

    '--- create an array for results the same size as the inputs
    Dim totals As Variant
    ReDim totals(LBound(unitsData) To UBound(unitsData), 1 To 1)

    Dim i As Long
    For i = LBound(totals) To UBound(totals)
        totals(i, 1) = unitsData(i, 1) * unitCostData(i, 1)
    Next i

    '--- finally copy the results back to the worksheet
    Dim totalsArea As Range
    Set totalsArea = Sheet1.Range("H2:H44")
    totalsArea = totals
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...