Ich verwende Excel 2013. In meinem Code, den ich beziehe, muss ich typische Daten in einer Excel-Tabelle bearbeiten. Zum Beispiel:
**Names**
Ann
Jim
Tom
Liz
Ich möchte kein a . einschließen +1 in meinem Code, wenn ich auf bestimmte Zellen in meinem Datensatz referenziere.
D.h. um "Ann" zu bekommen, würde ich lieber verwenden
Cells(1,1)
als
Cells (1+1,1)
Also definiere ich einen Bereich ohne die Header:
Set R = Range(Cells(2,1),Cells(5,1)
Und jetzt bezieht sich diese Aussage auf "Ann"
R.Cells(1,1)
Als nächstes möchte ich auf einen "Unterbereich" innerhalb meines Bereichs verweisen R:
R.Range(R.Cells(2,1), R.Cells(3,1))
Aber überraschenderweise statt der erwarteten "Jim" und "Tom" (zweite bis dritte Zelle in meiner Reichweite R), bekomme ich "Ann" und "Jim" (zweiter bis dritter im Excel-Tabelle).
Kann mir jemand einen Einblick geben, was mir hier fehlt?
Vielen Dank
Antworten:
1 für die Antwort № 1Dies ist ein klassischer Fall, in dem ererbte Abstammung nicht weitergegeben wird. Die Cells
innerhalb R.Range(Cells(2,1), Cells(3,1))
keine Ahnung haben, dass sie dazu gehören R
also verwenden sie standardmäßig die ActiveSheet-Eigenschaft das kann oder kann nicht einmal das Arbeitsblatt sein, das R
ist an (mehr Probleme gibt es mit a Index außerhalb des gültigen Bereichs Error).
with R
debug.print .Range(.Cells(2,1), .Cells(3,1)).address
end with
Das With ... End With-Anweisung ist der einfachste Weg, ererbte Abstammung weiterzugeben. Beachten Sie, dass .Cells
und nicht Cells
dient zur Weitergabe der Referenz. Es könnte auch geschrieben werden als:
debug.print R.Range(R.Cells(2,1), R.Cells(3,1)).address
Beispiel-Unter:
Sub Unexpected_result_with_Range_and_Cells()
Dim R As Range
Set R = Range(Cells(2, 1), Cells(5, 1))
Debug.Print R.Address
Debug.Print R.Cells(1, 1).Value
With R
Debug.Print .Range(.Cells(2, 1), .Cells(3, 1)).Address
Debug.Print .Cells(2, 1).Value
Debug.Print .Cells(3, 1).Value
End With
End Sub
Ergebnisse aus dem Direktfenster des VBE:
$A$2:$A$5
Ann
$A$4:$A$5
Jim
Tom