2017-01-31 2 views
0

Я продолжаю получать ошибку «ошибка объекта не установлен» с помощью этого кода. Я хочу компенсировать адрес ячейки startcell, чтобы принять среднее значение соответствующего столбца. Однако vba пытается компенсировать значение startcell, а не адрес ячейки. Было бы здорово, если бы кто-то мог предложить мне какое-то руководство. Благодаря!Переменная объекта не задана

Sub Macro1() 

    Dim i As Integer 
    Dim rowcount As Integer 
    Dim startcell As Range 

    startcell = ActiveSheet.Cells(2, 3).Address(False, False) 
    rowcount = Range("C2", Range("C2").End(xlDown)).Count 

    For i = 1 To rowcount 
     If Not Cells(i, 3).Value = Cells(i + 1, 3).Value Then 
      startcell.Offset(0, 11).Value = Application.WorksheetFunction.Average(_ 
      Range(startcell.Offset(0, 8), Cells(i, 11))) 
      startcell = ActiveSheet.Cells(i + 1, 3).Address(False, False) 
     End If 
    Next i 

End Sub 
+1

использование 'Set' для переменной startcell диапазона. 'Set startcell = ActiveSheet.Cells (2, 3)' – cyboashu

+0

Я сделал, но теперь он дает мне ошибку «объект требуется»? – kmalik

+0

use 'Set startcell = ActiveSheet.Range (Ячейки (2, 3), Ячейки (2, 3))' –

ответ

3

Чтобы сохранить заданный диапазон в переменном, либо использовать его address, который является строкой или Rangeобъектом. Последнее обычно предпочтительнее, и похоже, что вы были намерены.

Dim startcell As Range 
.... 
Set startcell = ActiveSheet.Cells(2, 3) ' <-- Set a range object variable 
.... 
Set startcell = ActiveSheet.Cells(i + 1, 3) ' <-- Set 

С другой стороны, если вы хотите использовать адрес (меньше рекомендуемого, если нет особых причин):

Dim startAddr As String ' <-- 
.... 
startAddr = ActiveSheet.Cells(2, 3).Address(False, False) ' <-- ok, save address 
.... 
Range(startAddr).Offset(0, 11).Value = ... ' Range(startAddr) reconstructs a range from the address 
startAddr = ActiveSheet.Cells(i + 1, 3).Address(False, False) 
Смежные вопросы