Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Componer un objeto con una cadena de texto

Estas en el tema de Componer un objeto con una cadena de texto en el foro de Visual Basic clásico en Foros del Web. Quiero implementar un botón de comando que ponga a True a la vez a 25 casillas de verificación llamadas CB1, CB2, CB3, ........ , CB25. ...
  #1 (permalink)  
Antiguo 08/02/2012, 14:00
 
Fecha de Ingreso: octubre-2007
Mensajes: 57
Antigüedad: 16 años, 6 meses
Puntos: 0
Pregunta Componer un objeto con una cadena de texto

Quiero implementar un botón de comando que ponga a True a la vez a 25 casillas de verificación llamadas CB1, CB2, CB3, ........ , CB25. Por supuesto, se puede utilizar 25 veces la sentencia:

CB1.Value = True
CB2.Value = True
.
.
CB25.Value = True

Pero estoy empeñado en hacerlo con poco código, como debe ser. Para ello he hecho este código que utiliza una variable de cadena de texto (NombreCasilla) y un For...Next para que la cadena quede cargada cada vez con "CB" concatenada con un número sucesivo de 1 a 25. El problema es que al poner la propiedad Value a True, se debe tratar de una variable de objeto y no de texto. Por tanto me da error (No coinciden los tipos), al intentar asignarle a la variable de objeto (NombreObjeto) una cadena de texto (NombreCasilla):

Código:
Private Sub cmdActivarTodas_Click()

Dim Contador As Integer, NombreCasilla As String, NombreObjeto As Object

Contador = 1

For Contador = 1 To 25
NombreCasilla = "CB" & Contador
Set NombreObjeto = NombreCasilla
NombreObjeto.Value = True
Contador = Contador + 1
Next Contador

End Sub
El fallo lo da en la linea:
Set NombreObjeto = NombreCasilla

¿Cómo puedo crear con una cadena de texto un nombre de objeto que ya existe en Excel?

Gracias
  #2 (permalink)  
Antiguo 08/02/2012, 16:17
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Componer un objeto con una cadena de texto

Pregunto, ¿ no tienes posibilidad de utilizar una matriz de elementos que sería muchos mas sencillo ?

Estas utilizando VB6, porque si es así seria algo como esto:

For Indice = 1 to 25
CB(Indice).Value = True
Next

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 09/02/2012, 14:28
 
Fecha de Ingreso: octubre-2007
Mensajes: 57
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Componer un objeto con una cadena de texto

Es Visual Basic de Excel 2007.

He rehecho el código para ver si funcionaba en forma de matriz:

Código:
Private Sub cmdActivarTodas_Click()

Dim Contador As Integer, NombreCasilla As String, CB(2) As Object

Contador = 1

For Contador = 1 To 2
    CB(Contador).Value = True
    Contador = Contador + 1
Next Contador

End Sub
pero tampoco funciona, ni declarando como Object ni como Integer
  #4 (permalink)  
Antiguo 10/02/2012, 04:46
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Componer un objeto con una cadena de texto

Puedes hacer esto

Código vb:
Ver original
  1. Private Sub cmdActivarTodas_Click()
  2.   Dim Ctrl As Control
  3.   Dim F As Integer
  4.   For F = 1 To 3
  5.     For Each Ctrl In Me.Controls
  6.       If Ctrl.Name = "Check" & F Then Ctrl.Value = 1: Exit For
  7.     Next Ctrl
  8.   Next F
  9. End Sub

PD: ops, no se si servira en excel
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #5 (permalink)  
Antiguo 11/02/2012, 06:38
 
Fecha de Ingreso: octubre-2007
Mensajes: 57
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Componer un objeto con una cadena de texto

Gracias pkj por tu aportación. La cosa va por ahí. Lo que ocurre es que no funciona el Me.Controls :
Código:
Private Sub cmdActivarTodas_Click()
Dim Ctrl As Control
Dim F As Integer
  For F = 1 To 3
    For Each Ctrl In Me.Controls
      If Ctrl.Name = "Check" & F Then Ctrl.Value = 1: Exit For
    Next Ctrl
  Next F
End Sub
Como has comentado, debe ser por las diferencias entre VB y Excel VB.
La cuestión ahora es como llamar al conjunto de controles, o al conjunto de objetos CheckBox, en Excel VB.
  #6 (permalink)  
Antiguo 14/02/2012, 05:18
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Componer un objeto con una cadena de texto

He hecho una prueba creando un userform en excel 2002 con vb6.3, he insertado un par de controles y no me ha dado ningun error con este codigo:

Dim ctrl As Control
For Each ctrl In Me.Controls
MsgBox ctrl.Name
Next ctrl

Ni con este otro:

Dim ctrl As Control
For Each ctrl In Controls
MsgBox ctrl.Name
Next ctrl

Ambos codigos me han mostrado los nombres de los controles que habia insertado.

PD: Tambien vigila que el valor de un CheckBox no es true y false sino 0 y 1.
True y False lo usan los OptionButton.
Quiza eso te este dando error.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #7 (permalink)  
Antiguo 14/02/2012, 11:33
 
Fecha de Ingreso: octubre-2007
Mensajes: 57
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Componer un objeto con una cadena de texto

El problema es que yo no tengo un userform, sino que los controles (CheckBox de ActiveX) están directamente sobre una hoja de cálculo de un libro de Excel 2007.
Con el código que has puesto:

Código:
Dim ctrl As Control
For Each ctrl In Me.Controls
MsgBox ctrl.Name
Next ctrl
Me da este error:

Error de compilación.
No se encontró el método o el dato miembro.

Yo esto lo he hecho con VB6 en su día y no tuve problemas porque todos los objetos están contenidos en un formulario, pero aquí los objetos están mas dispersos y el lenguaje hay que adaptarlo a Excel. El problema es cómo llamar a un conjunto de objetos que están en una hoja de un libro. He probado con:

Worksheets(1).Controls
Worksheets(1).Objects
Worksheets(1).Checkboxes

y más combinaciones, pero nada. La ayuda de Excel para esto es patética y no consigues encontrar lo que buscas. En fin.
  #8 (permalink)  
Antiguo 14/02/2012, 12:04
 
Fecha de Ingreso: octubre-2007
Mensajes: 57
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Componer un objeto con una cadena de texto

Bueno, ya he conseguido dar con la colección de objetos. Este código funciona:

Código:
Dim Ctrl As Object
Dim F As Integer
  For F = 1 To 23
    For Each Ctrl In Worksheets(2).OLEObjects
        If Ctrl.Name = "CheckBox" & F Then
            MsgBox Ctrl.Name
            Exit For
        End If
    Next Ctrl
  Next F
Como hay 23 Checkbox, me enseña 23 veces un mensaje dándome el nombre del checkbox que en cada iteración adopta la variable Ctrl. Perfecto.

Pero cuando cambio el MsgBox por el cambio de valor:

Código:
Dim Ctrl As Object
Dim F As Integer
  For F = 1 To 23
    For Each Ctrl In Worksheets(2).OLEObjects
        If Ctrl.Name = "CheckBox" & F Then
            Ctrl.Value = True
            Exit For
        End If
    Next Ctrl
  Next F
entonces no va.

Sin embargo sí funciona una instrucción suelta:

Código:
CheckBox1.Value = True
Me dice: El objeto no admite esta propiedad o método

Se ve que los objetos ActiveX de la colección OLEObjects no admiten la propiedad Value.
¡Vaya mieeeeelllllllda!
  #9 (permalink)  
Antiguo 14/02/2012, 12:15
 
Fecha de Ingreso: octubre-2007
Mensajes: 57
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Componer un objeto con una cadena de texto

Ahora sí. La cuestión es que a los objetos ActiveX hay que darles de comer a parte. Para llegar a la propiedad Value de un objeto ActiveX en Excel VB hay que poner:

Código:
ObjetoActiveX.Object.Value = True
Con este código sí funciona perfectamente:

Código:
Dim Ctrl As Object
Dim F As Integer
  For F = 1 To 23
    For Each Ctrl In Me.OLEObjects
        If Ctrl.Name = "CheckBox" & F Then
            Ctrl.Object.Value = True
            Exit For
        End If
    Next Ctrl
  Next F
Por fin, ¡SOLUCIONADO! Gracias pkj.
  #10 (permalink)  
Antiguo 15/02/2012, 04:01
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Componer un objeto con una cadena de texto

Me alegro de que lo hayas conseguido.
De todas formas es curioso que te funcione con true y false.
En VB6 siempre me da error asi. Los valores que admite un checkbox son 0, 1 y 2.

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Etiquetas: excel
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:27.