Microsoft Excel

Herbers Excel/VBA-Archiv

In welche Richtung wurde markiert?

Betrifft: In welche Richtung wurde markiert? von: Edmund
Geschrieben am: 12.10.2020 15:14:07

Hallo, liebe Excel-Gemeinde

Nachdem mir hier schon einige Male geholfen wurde, komme ich heute mal wieder mit einer Aufgabe, für die ich noch keine Lösung gefunden habe.

Die Aufgabe:
Der User soll eine oder mehrere Zellen in einer Zeile auswählen.

Diese Zellen sollen dann jede einzeln abgearbeitet werden. Also Selection. funktioniert nicht.

Bis jetzt helfe ich mir so:

i = Selection.Columns.Count - 1
z = ActiveCell.Row
s = ActiveCell.Column

For s = s To s + i

hier kommt ein Script
Next s

Das funktioniert.
Aber leider nur so lange, bis ein Schlaule auf die Idee kommt, die Zellen von rechts nach links zu markieren.
Dann wird natürlich von der aktiven Zelle auch nach links abgearbeitet
Deshalb die konkrete Frage, wie kann ich ermitteln, ob von der aktiven Zelle nach links, oder nach rechts markiert wurde?
Bin mal gespannt auf Eure Lösungen

Viele Grüße

Edmund

Betrifft: AW: In welche Richtung wurde markiert?
von: Daniel
Geschrieben am: 12.10.2020 15:25:20

Hi
Spielt die Reihenfolge eine Rolle?
Wenn einfach nur alle Zellen nacheinander bearbeitet werden müssen, dann reicht:

For each Zelle in Selection

Wobei Zelle als Range deklariert werden muss und die Objektvariable mit der jeweiligen Zelle ist.

Ansonsten kannst du mit Selection.Column die Spaltennummer der ersten Spalte der Selektion ermitteln und mit ActiveCell.Column die Spaltennummer der aktiven Zelle.
Vergleiche beide Werte:
Sind beide Spalten gleich, wurde von links nach rechts selektiert, ist die Spalte der aktiven Zelle größer, von rechts nach links.

Gruß Daniel

Betrifft: AW: In welche Richtung wurde markiert?
von: Nepumuk
Geschrieben am: 12.10.2020 15:31:32

Hallo Edmund,

warum nicht einfach so (Beispiel):

Public Sub Test()
    Dim objCell As Range
    Dim lngCount As Long
    If TypeOf Selection Is Range Then
        If Selection.Rows.Count = 1 Then
            For Each objCell In Selection
                lngCount = lngCount + 1
                objCell.Value = lngCount
            Next
        End If
    End If
End Sub

Gruß
Nepumuk

Betrifft: AW: In welche Richtung wurde markiert?
von: Edmund
Geschrieben am: 12.10.2020 15:46:06

Danke für Eure Antworten.

@Daniel
Die Reihenfolge spielt keine Rolle.
For Each in Selection, ist natürlich die Lösung.

@Nepomuk
Dein Code funktioniert einwandfrei, auch wenn ich noch nicht so 100% weiß, warum :)
Ich gehe davon aus, dass ich Dein

lngCount = lngCount + 1
objCell.Value = lngCount


einfach gegen meinen Code ersetzen kann.

Vielen Dank Euch beiden