2010-11-02 7 views
22

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

+0

Zeichnen Sie ein Makro auf, führen Sie Ihre Aktionen aus, stoppen Sie das Makro und sehen Sie sich den generierten Code an. – Sarfraz

+1

Versucht, aber das erzeugt einen vordefinierten Bereich. Ich möchte einen Bereich bekommen, der jedes Mal variiert. – Talguy

+1

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. –

Antwort

19

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

Danke. Das ist was ich brauche – Talguy

+0

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. –

+3

Er schrieb gerade ein Beispiel für die Verwendung des Auswahlobjekts. Ich benutze die count-Eigenschaft in meinem Code – Talguy

26

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.

+1

Während die Auswahl vom Typ Range ist, welche Requisiten und Methoden fehlen? Ich werfe es immer direkt auf Range type aber nur interessiert. –

8

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