Usuario selecciona rango

Hola.
Como se puede hacer para que una macro después de hacer algunas cosas, pregunte algo así como, seleccione el rango de celdas, permita al usuario mover el mouse y seleccionar el rango y volver a la macro.
Se me ocuure una forma que es una macro hasta que pregunta luego deja libre, selecciona y con un botón comienza una nueva macro con el rango activo en pantalla (CurrentRegion), ¿pero se puede hacer en una sola?
Además, ¿cómo se mueve el puntero del mouse desde una macro?
Gracias.

1 respuesta

Respuesta
1
Personalmente utilizaría un formulario con un control de ActiveX llamado "RefEdit".
Este control equivale a aquel selector de rangos que usa MS Excel con un botón de ventana colapsable que permite reducir al tamaño de la casilla de datos para que selecciones el rango.
Inserta un formulario nuevo en VBE y busca el control de RefEdit en la barra de "Controles". Y, por supuesto, un par de botones de comando para Aceptar / Cancelar.
En la macro lleva el control a la hoja donde debe efectuarse la selección y muestra el formulario (UserForm1. Show)
Una vez que aceptaste, el Control que se podría llamar "RefEdit1" contendrá el dato del rango seleccionado que podrás alojar en una variable definida como rango para utilizarla posteriormente.
---
Como verás no es necesario terminar una macro y empezar otra, todo puede estar en la misma.
Por lo tanto creo que no necesitarás mover el mouse.
(Por otra parte sólo sé que se puede mover desde una macro dentro de un Gráfico, no en la hoja).
Espero que te sirva.
Un abrazo trasandino!
Fernando
Todo bien, creo el formulario, inserto el RegEdit1, ¿pero cómo rescato el rango seleccionado?
set rango=RegEdit1. ????
Gracias.
En realidad, es como si obtuvieras un texto con la dirección. Así que haría lo siguiente:
Dim rango as Range
set rango = Range(RegEdit1)
...
Y ya lo tienes como un rango operable.
Espero que te haya servido.
Un abrazo!
Fernando
Todavía tengo problemas
Tengo el siguiente código aparte del formulario donde esta RefEdit1
Sub gg()
Dim rango As Range
UserForm1.Show
Cells(1, 1).Select
Set rango = Range(RefEdit1)
For Each e In rango
e.Value = 1
Next e
End Sub
Me marca la linea SET y dice que "Fallo en el método 'Range' de objeto '_Global'"
Tambien prové lo anterior con Refedit1.Text, pero tampoco funcionó...
Si tu código es exactamente como lo veo, tienes varios problemas de programación
Tu formulario debería contar con el clásico par de botones: Aceptar-Cancelar
Por lo tanto tu código gg
Debería ser solamente:
Sub gg()
Dim rango As Range
UserForm1.Show
End Sub
Aparece el formulario con el RefEdit, el usuario selecciona
el rango y, asociado al botón aceptar, seguiría este código:
Private Sub CommandButton1_Click()
Dim rango As Range
If Len(RefEdit1) > 0 Then
Set rango = Range(RefEdit1)
Else
MsgBox "No seleccionó rango. Salgo...", vbInformation, "Y EL RANGO?"
End If
Unload Me
Cells(1, 1).Select
For Each e In rango
e.Value = 1
Next e
Set rango = Nothing
End Sub
Donde se
Controla que efectivamente se haya seleccionado un rango.
Se asigna la selección a una variable.
Se descarga el formulario.
Se ejecutan los comandos sobre el rango definido.
Se descarga la memoria (de set)
Termina.
Esta sería una forma un poco más ortodoxa de resolver el código.
Lo probé y funcionó. Haz lo mismo y dime.
Ahí sí, no usé exactamente tu código, mi problema era que descargaba el userform con el botón y luego quería usar Refedit1, en cambio sólo agregué en el comando del botn, set rango=range(refedit1)
Y rango definido como Public, después solo lo usaba...
Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas