Wie kann ich eine Reihe von Zellen erhalten, die über die Benutzermauseingabe für die weitere Verarbeitung mit VBA ausgewählt werden?Benutzer auswählen Bereich auswählen
Antwort
Sie können das Selection-Objekt durchlaufen, um zu sehen, was ausgewählt wurde. Hier ist ein Code-Snippet von Microsoft (http://msdn.microsoft.com/en-us/library/aa203726(office.11).aspx):
Sub Count_Selection()
Dim cell As Object
Dim count As Integer
count = 0
For Each cell In Selection
count = count + 1
Next cell
MsgBox count & " item(s) selected"
End Sub
Danke. Das ist was ich brauche – Talguy
Sollte Selection.Count nicht ausreichen? Ich denke, dass die Count-Eigenschaft auf Selection-Objekt verfügbar ist. Das Durchlaufen der gesamten Auswahl scheint ein Overhead zu sein. –
Er schrieb gerade ein Beispiel für die Verwendung des Auswahlobjekts. Ich benutze die count-Eigenschaft in meinem Code – Talguy
Selection
ist ein eigenes Objekt in VBA. Es funktioniert ähnlich wie ein Range
Objekt.
Auswahl und Bereich haben jedoch nicht alle die gleichen Eigenschaften und Methoden. Aus Gründen der Benutzerfreundlichkeit kann es also sinnvoll sein, einen Bereich zu erstellen und ihn gleich der Auswahl zu setzen anderer Bereich.
Dim myRange as Range
Set myRange = Selection
Für weitere Lesung, überprüfen Sie die MSDN article aus.
Während die Auswahl vom Typ Range ist, welche Requisiten und Methoden fehlen? Ich werfe es immer direkt auf Range type aber nur interessiert. –
Dies hängt davon ab, was Sie mit "erhalten den Bereich der Auswahl" meinen. Wenn Sie meinen, den Bereich Adresse (wie "A1: B1") zu erhalten, dann verwenden Sie die Address-Eigenschaft des Selection-Objekts - wie Michael sagte Selection-Objekt ähnelt einem Range-Objekt, so dass die meisten Eigenschaften und Methoden darauf arbeiten.
Sub test()
Dim myString As String
myString = Selection.Address
End Sub
Zeichnen Sie ein Makro auf, führen Sie Ihre Aktionen aus, stoppen Sie das Makro und sehen Sie sich den generierten Code an. – Sarfraz
Versucht, aber das erzeugt einen vordefinierten Bereich. Ich möchte einen Bereich bekommen, der jedes Mal variiert. – Talguy
Das liegt daran, dass Sie "Relative Referenzen verwenden" deaktiviert haben (es befindet sich auf der Registerkarte "Entwickler" in der Gruppe "Code"). Wie unten auf die Antwort Bezug genommen wird, wird das Selection-Objekt (das eine Range-Instanz ist) aufgezeichnet. –