2010-11-02 32 views
22

¿Cómo puedo obtener un rango de celdas seleccionadas a través de la entrada del mouse del usuario para su posterior procesamiento usando VBA?Obtener rango seleccionado por el usuario

+0

Registre una macro, realice sus acciones, detenga la macro y luego vea el código generado. – Sarfraz

+1

Probé eso pero eso genera un rango predefinido. Quiero un rango que variará cada vez. – Talguy

+1

Esto se debe a que tiene desactivada la opción "Usar referencias relativas" (está en la pestaña Desarrollador del grupo Código). Como se refiere a la respuesta a continuación, es el objeto Selección (que es una instancia de Rango) que se grabará. –

Respuesta

19

Puede recorrer el objeto Selección para ver lo que se seleccionó. Aquí es un fragmento de código de 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

Gracias. Eso es lo que necesito – Talguy

+0

¿No debería bastar Selection.Count? Creo que la propiedad Count está disponible en el objeto Selection. Bucle a través de toda la selección parece una sobrecarga. –

+3

Acababa de publicar un examen sobre cómo usar el objeto de selección. Uso la propiedad count en mi código – Talguy

26

Selection es su propio objeto dentro de VBA. Funciona muy parecido a un objeto Range.

La selección y el rango no comparten todas las mismas propiedades y métodos, por lo que para facilitar su uso puede tener sentido crear un rango y establecerlo igual a la selección, entonces puede tratarlo programáticamente como cualquier otro rango

Dim myRange as Range 
Set myRange = Selection 

Para leer más, echa un vistazo a la MSDN article.

+1

Si bien la selección es del tipo Range, ¿qué accesorios y métodos se echa en falta? Siempre lo echo directamente al tipo Range de todos modos, pero solo me interesa. –

8

Esto depende de lo que quiere decir con "obtener el rango de selección". Si quiere decir obtener el rango dirección (como "A1: B1") entonces use la propiedad Address del objeto Selection - como Michael dijo que el objeto Selection es muy parecido a un objeto Range, por lo que la mayoría de las propiedades y métodos funcionan en él.

Sub test() 
    Dim myString As String 
    myString = Selection.Address 
End Sub 
Cuestiones relacionadas