2016-07-19 11 views
-2

Ich habe 3 Arbeitsblätter und ich versuche, einer Variablen auf einem der Blätter einen Bereich zuzuordnen, basierend auf Bereichen in zwei anderen verschiedenen Arbeitsblättern. Hier ist mein Code:Zuweisen von zwei Bereichen von separaten Blättern zu einer Variablen

Sub Combine() 

    Dim range1 As Range 
    Dim range2 As Range 
    Dim ID As Range 

    Set range1 = Worksheets(3).Range("A2:A") 
    Set range2 = Worksheets(4).Range("A2:A") 
    Set newRng = Worksheets(6).Range(range1, range2) 

End Sub 

Ich bin immer wieder ein

Laufzeitfehler '1004'

Irgendwelche Vorschläge?

+1

Die Range-Methode, die zwei andere Bereiche akzeptiert (Range r1, Range r2), erwartet, dass sich diese beiden Bereiche auf demselben Blatt befinden wie das Arbeitsblatt, auf dem sie aufgerufen wurde. Sie haben Bereich 1 von Blatt 3 und Bereich 2 von Blatt 4 definiert, was fehlschlägt und auf einem völlig anderen Blatt aufgerufen wurde. 6. Was haben Sie von dem Code erwartet, damit ich Ihnen helfen kann, das zu erreichen, was Sie erwartet haben? – Mikegrann

+0

@Mikegrann Ich möchte beide Bereiche aus separaten Blättern zu einer einzigen Variable zuweisen, ich denke, die erste Antwort kann funktionieren, ich versuche es jetzt. – H5470

Antwort

1

Ein Bereich kann nicht mehrere Arbeitsblätter umfassen.

Dies kann funktionieren, je nachdem, was Sie letztendlich tun müssen:

Set newRng = Worksheets(6).Range(range1.Address, range1.Address) 

Aber, da diese Bereiche die gleiche Adresse in Ihrem Beispiel haben, denke ich, was Sie wollen, ist nicht ein Range Objekt kombiniert sie, aber einige andere Datenstruktur, wie ein Array, eine Sammlung oder ein Wörterbuch.

HINWEIS Ihre Bereiche sind nicht gültig für den Anfang, Range("A2:A") ist nicht gültig, also müssen Sie das beheben. Siehe here für zuverlässige Wege, um die "letzte" Zelle in einem Bereich zu finden. Ich habe es so modifiziert, dass es die gesamte Spalte A (außer A1) enthält, aber Sie werden das wahrscheinlich genau einstellen wollen.

newRange haben einen anderen Datentyp, der für diese ohne Anheben eines Fehlanpassungsfehler zu arbeiten, zum Beispiel einer Collection:

Sub Combine() 
    Dim coll as New Collection 
    Dim range1 As Range 
    Dim range2 As Range 
    Dim ID As Range 

    coll.Add Worksheets(3).Range("A2:A" & Rows.Count) 
    coll.Add Worksheets(4).Range("A2:A" & Rows.Count) 
    Set newRng = coll 
End Sub 

oder als ein Array von Bereich:

Sub combine() 
Dim newRange(1) As Range 


Set r1 = Worksheets(3).Range("A2:A" & Rows.Count) 
Set r2 = Worksheets(4).Range("A2:A" & Rows.Count) 

Set newRange(0) = r1 
Set newRange(1) = r2 
End Sub 

Verwendung Im obigen Arraybeispiel können Sie die Werte dann einem anderen Speicherort zuweisen und bei Bedarf ändern:

+0

Ich bekomme einen Fehler von der Sammlung zurück, liegt es daran, dass, wie die Antwort unten gezeigt hat, "A2: A" nicht gültig ist? – H5470

+0

Dies wird den gleichen 1104 Fehler geben 'Set r1 = Arbeitsblätter (3) .Range (" A2: A ")' – cyboashu

+0

Ja, wenn Ihr Bereich nicht gültig ist, das ist eine andere Ursache für den gleichen Fehler. –

Verwandte Themen