2016-05-08 15 views
0

Als ich versuchte, unter die Funktion zu nutzen, ich war nicht in der Lage einen dynamischen Bereich als Argument übergebenNicht einen Dynamikbereich als Argument übergeben können

Function ConcatinateAllCellValuesInRange(sourceRange As Excel.Range) As String 
    Dim finalValue As String 

    Dim cell As Excel.Range 

    For Each cell In sourceRange.Cells 
     finalValue = finalValue + CStr(cell.Value) 
    Next cell 

    ConcatinateAllCellValuesInRange = finalValue 
End Function 

Sub MyMacro() 
    MsgBox ConcatinateAllCellValuesInRange([A1:C3]) 
End Sub 

ich nicht

verwenden könnte
Sub MyMacro() 
    Dim rng as range 
    Rng=Range(Range("A2"),Range("A2").End(xlDown).Row)) 
    MsgBox ConcatinateAllCellValuesInRange([Rng]) 
End Sub 
+0

Add "Set" Schlüsselwort vor "RNG", so dass es "Set RNG = Range (Range (" A2 "), Range (" A2 "). End (xlDown) .Row))" liest – user3598756

+1

Warum konntest du das nicht benutzen? Hat es einen Kompilierungsfehler erzeugt? Ich sehe nicht, wo Sie diese Informationen bereitgestellt haben. – jmcilhinney

+2

Entweder das ist VB.NET oder es ist VBA. Warum hast du beide Tags? Welches ist es? – jmcilhinney

Antwort

0

Es ist deine Syntax, die falsch ist.

Um ein Objekt zu definieren, müssen Sie das Schlüsselwort Set verwenden; die .Row Funktion gibt ein Long nicht ein Range Objekt zurück, so dass Sie das entfernen müssen; und Sie übergeben einfach die rng Variable in Ihrer Funktion.

Function ConcatinateAllCellValuesInRange(sourceRange As Range) As String 
    Dim finalValue As String 

    Dim cell As Excel.Range 

    For Each cell In sourceRange.Cells 
     finalValue = finalValue & CStr(cell.Value) 
    Next cell 

    ConcatinateAllCellValuesInRange = finalValue 
End Function 

Sub MyMacro() 
    Dim rng As Range 
    Set rng = Range(Range("A2"), Range("A2").End(xlDown)) 
    MsgBox ConcatinateAllCellValuesInRange(rng) 
End Sub 
Verwandte Themen