2017-01-11 1 views
0

Я передаю два аргумента диапазона в функции. Один работает нормально, но второй дает ошибку компиляции.Ошибка ошибки VBA при попытке передать диапазон как аргумент

Здесь я вызываю функцию -

Set SourceRange = Sheets("QueryResult").Range("QueryResult") 
Set DestinationRange = Sheets("TradeUnderlyingCptyWWRTemplate").Range("CounterpartyName") 
Call PopulateDetails(23, SourceRange, DestinationRange, 2, 8) 

А вот функция:

Function PopulateDetails(SourceColumns As Integer, Srce As Range, Destination As Range, DestinationColums As Integer, DestinationRows As Integer) 

Dim CellName As String 
Dim a, b, i As Integer 

For b = 0 To DestinationRows - 1 
    For a = 0 To DestinationColums - 1 

     On Error GoTo Err: 
     Sheets("TradeUnderlyingCptyWWRTemplate").Select 
     Destination.Offset(b, a).Select 
     CellName = Destination.Offset(b, a).Name.Name 

     For i = 0 To SourceColumns - 1 
      If (Destination.Offset(b, a).Name.Name = Srce.Offset(0, i).Value And Destination.Offset(b, a).Value = "") Then 
       Destination.Offset(b, a).Value = Srce.Offset(1, i).Value 
       Exit For 
      End If 
     Next 
Err: 
     On Error Resume Next 
     Err.Clear 
     CellName = "" 
    Next 
Next 

End Function 

Однако он дает компиляции ошибка:

byref argument type mismatch

с SourceRange выделены код.

Когда я изменяю функцию только с четырьмя аргументами (удаление аргумента источника), она работает нормально.

+1

Я предполагаю, что у вас есть [ 'Dim SourceRange, DestinationRange As Range'] (HTTP : //stackoverflow.com/q/28238292/11683) где-то, что делает его возможным дубликатом [Ошибка несогласия типа аргумента ByRef "Ошибка VB6] (http: // stackove rflow.com/q/25316331/11683). – GSerg

+0

Да, вы правы, у меня есть Dim SourceRange, DestinationRange как Range в начале кода. Удаление этой строки по-прежнему вызывает такую ​​же ошибку. –

+0

Затем нажмите обе ссылки. – GSerg

ответ

0

Вам нужно изменить

Dim SourceRange, DestinationRange As Range 

Для

Dim SourceRange As Range 
Dim DestinationRange As Range 

В противном случае это эквивалентно

Dim SourceRange As Variant 
Dim DestinationRange As Range 
+0

Спасибо ton @neelsg Это сработало отлично. –