/ / Excel VBA: Unerwartetes Ergebnis mit Bereich und Zellen - Excel-VBA, Bereich, Zellen, VBA, Excel

Excel VBA: Unerwartetes Ergebnis mit Bereich und Zellen - Excel-VBA, Bereich, Zellen, VBA, Excel

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 № 1

Dies 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