2015-08-19 2 views
1

Привет Пожалуйста, помогите мне с ниже,Pass .Range в качестве параметра VBA

Sub movedata() 

    Call select_data(.Range("B6:B12")) 


End Sub 


Function select_data(C As Range) 

    Worksheets("sheet1").Range("I6:I16") = Worksheets("Sheet1").Range(C).Value 

End Function 

Я не могу видеть, где я неправильно,

Спасибо,

ответ

1

C уже есть Range, поэтому нет необходимости передавать его функции Range() (которая в любом случае ожидает строку) для ее создания.

Изменение:

Worksheets("sheet1").Range("I6:I16") = Worksheets("Sheet1").Range(C).Value 

To:

Worksheets("sheet1").Range("I6:I16") = C 
+0

Спасибо, я все еще получаю сообщение об ошибке для .range («B6: B16»), когда я звоню secect_data .... Invalid или неквалифицированная ссылка – AL92

+0

вы используете '' .' перед тем .Range (...) ', который я предположил, потому что у вас был блок' With Sheets (...) ', который вы просто не показывали. Если вы хотите передать диапазон из активного листа, просто удалите '.', когда вы передадите свой диапазон. В противном случае прикрепите его к имени вашего листа: 'Call select_data (Листы (« mysheet »). Диапазон (« B6: B12 »)). – Bond

0

Вы путаете диапазон как Range object с его Address property.

Метод 1:

Sub movedata() 
    Call select_data(Range("B6:B12").address) 
End Sub 

Function select_data(C As string) 
    with Worksheets("sheet1") 
     .Range("I6:I16") = .Range(C).Value 
    end with 
End Function 

Метод 2:

Sub movedata() 
    Call select_data(Worksheets("sheet1").Range("B6:B12")) 
End Sub 

Function select_data(C As range) 
    C.parent.Range("I6").resize(C.rows.count, C.columns.count) = C.Value 
End Function 

FWIW, там собирается быть некоторые трудности начинку B6: B12 значения в в I6: клетки i16 в. Кажется, что есть 4 недостающих значения.

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