2013-05-28 2 views
0

У меня есть диаграмма данных со многими продуктами.Присвоение значения формулы ячейке

Я хочу фильтровать каждый тип продукта, рассчитать общее количество этого типа, а также количество продуктов внутри этого типа. И, наконец, введите значение этой функции в колонку в Листе 2.

Вот код. Колонка величины столбец U. Он получает ошибка 1004: Аргумент не обязательно, и это подчеркивает Set .... = FunctionR1C1 = .... часть

Function T_Quantity() 
    ActiveSheet.Range("U").Select 
    Total = FunctionR1C1 = "=subtotal(9,C[0])" 
End Function 

Function T_Count(ref_column) 
    ActiveSheet.Range("U").Select 
    Total = FunctionR1C1 = "=subtotal(2,C[0])" 
End Function 

Sub Total_Count() 
Dim my_array() As String 
Dim iLoop As Integer 
Dim iCount As Integer 

iCount = 1 
ReDim my_array(3) 

my_array(0) = "=M1747B" 
my_array(1) = "=M1747C" 
my_array(2) = "=M1766B" 

For iLoop = LBound(my_array) To UBound(my_array) 

    ActiveSheet.Range("A:BB").Select 

    Selection.AutoFilter Field:=15, Criteria1:=my_array 
    Application.CutCopyMode = False 

    'Calculate the quantity and no of lot, put in colum A,B in sheet 2' 
    Set Worksheets("Sheet2").Cells(iCount, 1) = T_Quantity() 
    Set Worksheets("Sheet2").Cells(iCount, 2) = T_Count() 
    Application.CutCopyMode = False 

    iCount = iCount + 1 

Next iLoop 

End Sub 
+1

Вы не передаете какие-либо аргументы в функции; ваши функции не возвращают никаких значений и, таким образом, вы используете функцию, когда можете/должны использовать 'Sub'. Кроме того, 'Total = FunctionR1C1 =" = subtotal (9, C [0]) "является бессмысленным, это булево выражение (в лучшем случае), которое вернет только« True »или« False ». –

+0

Да, я начинаю, поэтому мои знания немного ограничены: «> Но я подумал, что когда вам нужно вернуть значение, вам нужно использовать функцию insted sub. И еще одна вещь, я не уверен в назначении формула также, можете ли вы переписать fucntion для меня, я просто хочу назначить «значение» функции переменной или перейти к одной ячейке. Thanks –

+1

Да и нет. Вы должны использовать функцию для * вычисления * и верните значение в подпрограмму, если вы просто манипулируете объектом рабочего листа - что вы делаете - это может быть частью существующей подпрограммы, или это может быть другая подпрограмма. Я постараюсь дать вам предложение. –

ответ

0

Давайте начнем с этого и посмотреть, если это получает вас любой ближе к желаемым результатам:

Sub Total_Count() 
Dim my_array() As String 
Dim iLoop As Integer 
Dim iCount As Integer 

iCount = 1 

ReDim my_array(3) 
my_array(0) = "=M1747B" 
my_array(1) = "=M1747C" 
my_array(2) = "=M1766B" 

For iLoop = LBound(my_array) To UBound(my_array) 
    ActiveSheet.Range("A:BB").Select 
    Selection.AutoFilter Field:=15, Criteria1:=my_array 
    Application.CutCopyMode = False 

    'Calculate the quantity and no of lot, put in colum A,B in sheet 2' 
    Worksheets("Sheet2").Cells(iCount, 1).FormulaR1C1 = "=subtotal(9,C[0])" 
    Worksheets("Sheet2").Cells(iCount, 2).FormulaR1C1 = "=subtotal(2,C[0])" 
    Application.CutCopyMode = False 
    iCount = iCount + 1 

Next iLoop 

End Sub 

Что изменилось:

  • Устранить Set ключевое слово при работе с клеточными объектами на рабочем листе. Set используется для назначения переменных объекта.
  • Так как функции, которые вы вызываете, просто устанавливают свойство ячейки FormulaR1C1, я добавляю свойство .FormulaR1C1 к этим строкам, а затем вместо использования Function я просто помещаю нотацию функции R1C1 непосредственно в эту подпрограмму.
+0

Спасибо, мой код прямо сейчас на самом деле совсем тот же, я просто вставляю значение этих столбцов (с формулой в другой столбец на другом листе с тех пор (я еще не очень хорошо разбираюсь в ссылках :)) Спасибо за помощь –

Смежные вопросы