2014-11-10 3 views
1

в моем приложении я вызываю функцию и передать 4 значения для расчета ячейки адреса:УВЫ - правильно передавая значение диапазона для функции

nettowertadresse = searchAdress(Dateiname, CurrentSheet, "Nettowert", Range("A1:C60")) 

функция:

Function searchAdress(inputworkbook As String, inputsheet As String, inputsearchtext As String, inputrange As Range) As Range 

    With Workbooks(inputworkbook).Sheets(inputsheet).Range(inputrange) 
     Set searchAdress = .Find(inputsearchtext, LookIn:=xlValues) 
    End With 

End Function 

Теперь проблема заключается в том, что я получаю сообщение об ошибке 1004 «определенная или объектная ошибка», и я думаю, что, возможно, диапазон не прошел должным образом, потому что отладчик не показывает значение переменной «inputrange» при переходе к функции. пожалуйста, дайте несколько советов о том, как заставить эту функцию работать. Благодарю.

+0

Кажется, что переменная 'inputRange' вводит функцию' As Range', но для использования вы скорее должны быть 'As String'. Каково именно значение, которое вы передаете функции (просто укажите пример)? –

+0

как видно выше, i pass: Range («A1: C60») – chrnit

+1

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

ответ

3

Ваша функция, searchAddress, объявляет inputrange as Range. Это означает, что объект внутри вашей функции является объектом Range.

Поэтому вы не должны использовать его как .Range(inputrange). Вместо этого попробуйте использовать этот код, который лечит его правильно как Range объекта:

Function searchAdress(inputworkbook As String, inputsheet As String, inputsearchtext As String, inputrange As Range) As Range 

    With Workbooks(inputworkbook).Sheets(inputsheet) 
     Set searchAdress = inputrange.Find(inputsearchtext, LookIn:=xlValues) 
    End With 

End Function 

Также обратите внимание, что есть еще одна ошибка в коде, который вызывает эту функцию. Вы должны использовать ключевое слово Set при присвоении возвращаемого значения для вашей nettowertadresse переменного:

Set nettowertadresse = searchAdress(Dateiname, CurrentSheet, "Nettowert", Range("A1:BA2")) 

В противном случае вы будете испытывать ошибки времени выполнения «91», который вы упоминаете в your follow-up question.

2

вы добавить диапазон к rangeobject в вашей функции, ваша функция выглядит так, то:

With Workbooks(inputworkbook).Sheets(inputsheet).Range(Range("A1:C60")) 
     Set searchAdress = .Find(inputsearchtext, LookIn:=xlValues) 
    End With 

Вы должны изменить это:

Function searchAdress(inputworkbook As String, inputsheet As String, inputsearchtext As String, inputrange As String) As Range 

    With Workbooks(inputworkbook).Sheets(inputsheet).Range(inputrange) 
     Set searchAdress = .Find(inputsearchtext, LookIn:=xlValues) 
    End With 

End Function 

А потом передать это функции:

nettowertadresse = searchAdress(Dateiname, CurrentSheet, "Nettowert", "A1:C60") 
+0

, который работает, но мне нужен адрес. до сих пор кажется, что переменная searchAdress наследует значение «nettowert», но не адрес. Я думал, что .find возвращает адрес. Что я делаю не так? получение ошибки 91 btw – chrnit

+0

это проблема? или это исправлено с другим ответом, который вы получили? –

+0

Да, это проблема – chrnit