Referenciar controles de una Hoja

Solo consultas sobre macros y código VBA Excel.

Reglas del Foro
1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!
Compartir en:
     

Referenciar controles de una Hoja

Notapor yhosol » 10 Abr 2006 15:18

Quisiera saber como referenciar un control (Command, textbox,etc) colocado en una hoja de cálculo mediante un í­ndice numérico o de tipo cadena.

P. ejemplo, si colocamos un textbox en una hoja de cálculo que lo pudiéramos referenciar en una forma válida equivalente a la siguiente

Me.Application.ActiveSheet.Controls("Text1").Text

ó Me.Application.ActiveSheet.Controls(1).Text, en caso de que el í­ndice 1 correspondiese al cuadro de texto colocado.



Lo anterior es como para poder recorrer mediante un bucle varios controles en una hoja de cálculo y poder realizar operaciones de lectura y de cambios sobre las propiedades de los controles en tiempo de ejecución mediante visual basic.


De antemano gracias,

Yhon
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
yhosol
Miembro Nuevo
Miembro Nuevo
 
Registrado: 30 Mar 2006 17:50
Ubicación: Bogotá

Re: Referenciar controles de una Hoja

Notapor Tavo77 » 10 Abr 2006 16:25

Creo que los botones que se insertan en una hoja pertenecen al conjunto 'Shapes' por lo que habrí­a que listarlos con algo así­ como:
Código: Seleccionar todo
for i = 1 to ActiveSheet.Shapes.Count
debug.print activesheet.shapes(i).caption
next

No se si hay alguna forma de diferenciar estos controles de otras autoformas.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
Tavo77
Miembro Frecuente
Miembro Frecuente
 
Registrado: 25 Ago 2005 20:43
Ubicación: Costa Rica

Re: Referenciar controles de una Hoja

Notapor KL » 10 Abr 2006 17:02

Hola chicos,
Tavo77";p="24034 escribió:No se si hay alguna forma de diferenciar estos controles de otras autoformas.


Si se puede, pero no es muy obvio :-)

1) Con los controles de la barra de herramientas Formularios todo es relativamente facil:

Activesheet.Buttons(1).Select

Activesheet.ListBoxes.Select

etc.

Ademas se puede usar la propiedad Type del objeto Shape para crear una matriz con los nombres de los controles, p.ej:

Código: Seleccionar todo
Sub SelectAllControlToolboxShapes()
    With ActiveSheet.Shapes
        numShapes = .Count
        If numShapes > 1 Then
            ReDim btnsArray(0)
            For i = 1 To numShapes
                If .Item(i).Type = 12 Then
                    btnsArray(UBound(btnsArray)) = .Item(i).Name
                    ReDim Preserve btnsArray(UBound(btnsArray) + 1)
                End If
            Next
            If UBound(btnsArray) > 0 Then
                ReDim Preserve btnsArray(UBound(btnsArray) - 1)
                .Range(btnsArray).Select
            End If
        End If
    End With
End Sub


2) Algo parecido con los ActiveX controles de la barra de herramientas Visual Basic for Applications se podria conseguir mediante el siguiente codigo:

Código: Seleccionar todo
Sub SelectActiveXButtons()
    Dim OLEobj As Excel.OLEObject
   
    ReDim btnsArray(0)
    For Each OLEobj In ActiveSheet.OLEObjects
        If TypeOf OLEobj.Object Is msforms.CommandButton Then
            btnsArray(UBound(btnsArray)) = OLEobj.Name
            ReDim Preserve btnsArray(UBound(btnsArray) + 1)
        End If
    Next OLEobj
   
    If UBound(btnsArray) > 0 Then
        ReDim Preserve btnsArray(UBound(btnsArray) - 1)
        ActiveSheet.Shapes.Range(btnsArray).Select
    End If
End Sub


Una vez obtenida la matriz de nombres, se podria usar unos indices numericos para referirse a los controles:

ActiveSheet.Shapes(btnsArray(i)).Select

Nota: Los procedimientos de arrioba los escribi hace varios años por lo que es posible que sean optimizables ' solo que no he tenido tiempo para revisarlos.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: Referenciar controles de una Hoja

Notapor Tavo77 » 11 Abr 2006 11:31

Muchas gracias KL, está bueno el truco. Ya que se nota que sabes bastante de Excel y estás dispuesto a ayudar al prójimo, querí­a pedirte que por favor te fijaras en esta pregunta que hice hace algún un tiempo y a la cual nadie me ha dado una respuesta, para ver si vos me podés orientar al respecto:[url]
http://www.exceluciones.com/portal/view ... highlight=[/url]
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
Tavo77
Miembro Frecuente
Miembro Frecuente
 
Registrado: 25 Ago 2005 20:43
Ubicación: Costa Rica


Compartir en:
     

  • Anuncio
Manual Excel avanzado

Volver a Macros

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 5 invitados