Problema con formulario abierto en ejecución

Estoy intentando hacer un programa en Ms access y tengo un problema. Creo un formulario en tiempo de ejecución (set frm=CreateForm) y creo para el un control de lista (le llamo ctlText), pero cuando intento referirme a una propiedad de el no me deja. He hecho lo que pone en la Ayuda de Visual Basic Access (ctlText. Caption="hola", por ejemplo), pero me da el error 2467 en tiempo de ejecución. ¿Hay alguna manera de solucionar esto?. Te incluyo el código:
Private Sub cmdHelp_Click()
Dim frm As Form
Dim NOMBRE As Integer
Dim ctlLabel As Control, ctlText As Control
Dim intDataX As Integer, intDataY As Integer
Dim intLabelX As Integer, intLabelY As Integer
' Crea un formulario nuevo con la tabla Pedidos como origen de registros.
Set frm = CreateForm
With frm
.Caption = "suso"
.NavigationButtons = False
.RecordSelectors = False
.Width = 4360
.Visible = True
'.DefaultView = 0
.AllowDesignChanges = False
.AllowEdits = False
'.PopUp = True
.DividingLines = False
End With
' Establece los valores de posición para los nuevos controles.
intLabelX = 100
intLabelY = 100
intDataX = 1000
intDataY = 100
' Crea un cuadro de texto independiente de tamaño predeterminado en la sección de detalle.
Set ctlText = CreateControl(frm.Name, acListBox, , "", "CONSULTA A ELIMINAR", _
IntDataX, intDataY, 2500, 4000)
' Crea un control de etiqueta secundario para el cuadro de texto.
Set ctlLabel = CreateControl(frm.Name, acLabel, , _
CtlText. Name, "NuevaEtiqueta", intLabelX, intLabelY)
' Restaura el formulario.
DoCmd. OpenForm frm. Name
For NOMBRE = 1 To 7000
Next
ctlText.RowSourceType = "value list"
ctlText.RowSource = "nada"
DoCmd.Restore
End Sub

1 Respuesta

Respuesta
1
Los controles creados con los métodos CreateControl, sólo se pueden manipular en la vista diseño una vez creados.
Como al crear un formulario con la orden CreateForm, se abre en modo diseño el nuevo formulario, lo único que tienes que hacer es ejecutar la orden de abrir el formulario, una vez hayas modificado las propiedades de los controles.
Saludos. Query
Sigue probando las posibilidades de esta base de datos.
Muchas gracias por el interés y la respuesta. Ahora tengo otra pregunta. Una vez probado esto. ¿No hay ninguna manera de que, una vez creado el nuevo formulario, pueda coger un valor del cuadro de lista que cree, después de abrirlo?. Lo he intentado, pero no hay manera
Si quieres obtener algún valor del cuadro de lista de has creado, tendrás 1º que activar las ediciones del formulario y luego utilizando la colección forms acceder al formulario y a los objetos que contiene.
Te muestro un ejemplo que cargar el formulario con 100 números y obtiene el valor de la 6ª fila del cuadro de lista.
Private Sub Comando99_Click()
Dim frm As Form
Dim Valor As Long
Dim ctlLabel As Control
Dim ctlText As Control
Dim intDataX As Integer, intDataY As Integer
Dim intLabelX As Integer, intLabelY As Integer
Dim Nm As String
Dim LineaLista As String
' Crea un formulario nuevo con la tabla Pedidos como origen de registros.
Set frm = CreateForm
With frm
.Caption = "suso"
.NavigationButtons = False
.RecordSelectors = False
.Width = 4360
.Visible = True
'.DefaultView = 0
.AllowDesignChanges = False
.AllowEdits = False
'.PopUp = True
.DividingLines = False
.AllowEdits = True
End With
' Establece los valores de posición para los nuevos controles.
intLabelX = 100
intLabelY = 100
intDataX = 1000
intDataY = 100
' Crea un cuadro de texto independiente de tamaño predeterminado en la sección de detalle.
Set ctlText = CreateControl(frm.Name, acListBox, , "", "", _
intDataX, intDataY, 2500, 4000)
' Crea un control de etiqueta secundario para el cuadro de texto.
Set ctlLabel = CreateControl(frm.Name, acLabel, , _
ctlText.Name, "NuevaEtiqueta", intLabelX, intLabelY)
ctlText.Name = "ListaNumeros" ' Asignamos un nombre al control para usarlo posteriormente
ctlText.ColumnCount = 2 ' La lista tendrá 2 columnas
ctlText.RowSourceType = "lista de valores" ' Será una lista de valores
' Asignamos los valores a la lista
For Valor = 1 To 100
LineaLista = Str(Valor) & ";" & Str(Valor * 2)
ctlText.RowSource = ctlText.RowSource & LineaLista & ";"
Next
Nm = frm.Name 'Guardamos el nombre del formulario para poder utilizarlo después
' Restaura el formulario.
DoCmd.OpenForm frm.Name
DoCmd.Restore
' Mostramos el valor de la 1ª columna de la 6 fila del cuadro
MsgBox Forms(Nm)!ListaNumeros.Column(0, 5)
End Sub
Espero que te sirva. Query.
Gracias. Lo que buscaba era poder coger un valor haciendo click sobre la lista, pero ya lo he solucionado de otra manera... de todos modos, si sabes como hacerlo, me gustaría que me contestaras, porque he tenido que crear otro formulario y me interesaba más que se creara en tiempo de ejecución

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas