2017-01-11 5 views
0

Ich bin zwei Bereichsargumente in einer Funktion übergeben. Einer funktioniert gut, aber zweitens gibt Kompilierungsfehler.VBA Complie Fehler beim Versuch, Bereich als Argument übergeben

Hier bin ich den Aufruf der Funktion -

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

Und hier ist die Funktion:

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 

Es wird jedoch geben kompilieren Fehler:

byref argument type mismatch

mit SourceRange hervorgehoben der Code.

Wenn ich die Funktion ändern, um nur vier Argumente zu haben (Löschen Source-Argument), funktioniert es gut.

+1

entspricht Ich nehme an, Sie haben [ 'Dim SourceRange, DestinationRange Als Range'] (http : //stackoverflow.com/q/28238292/11683) irgendwo, was es zu einem möglichen Duplikat von [ByRef Argument Type Mismatch "Error VB6] macht (http: // stackove rflow.com/q/25316331/11683). – GSerg

+0

Ja, Sie haben Recht, ich habe Dim SourceRange, DestinationRange als Range am Anfang des Codes. Das Entfernen dieser Zeile führt immer noch zu demselben Fehler. –

+0

Dann klicken Sie auf beide Links. – GSerg

Antwort

0

Sie benötigen

Dim SourceRange, DestinationRange As Range 

Um

Dim SourceRange As Range 
Dim DestinationRange As Range 

Ansonsten ändern sie

Dim SourceRange As Variant 
Dim DestinationRange As Range 
+0

Dank einer Tonne @ Neelsg Es hat perfekt funktioniert. –

Verwandte Themen