|
Responder ![]() |
Autor | |
deprofundis ![]() Habitual ![]() ![]() Unido: 18/Noviembre/2015 Localización: Madrid Estado: Sin conexión Puntos: 62 |
![]() Enviado: 18/Enero/2016 a las 17:44 |
Hola a todos
Querría usar una función para dar de baja registros, sin eliminarlos de la Bd, mediante los valores si/no de un campo de nombre “EXISTEN” en el Formulario "FormLibros". Si se da de baja (valor "NO" en campo "EXISTEN") el registro, deben aparecer en color rojo, solo los controles cuyo origen es un campo de la tabla, y si está el registro activo (valor "SI" en campo "EXISTEN")se deja en blanco. Me gustaría hacerlo esto con VBA sin usar el formato condicional y se aplicaría a la vista "Un único formulario", usando una función que llamaría desde un botón. Había pensado llamar a una función del tipo: Public Function RegistrosBaja (Frm as form, cancel as integer) as boolean For each Ctrl in Frm.Controls if Typeof Ctrl is textbox or Typeof Ctrl is ComboBox then IF Ctrl.Controlsource = "Select * From Libros Then Ctrl.BackColor =vbRed En la claúsula IF... (la que me da problemas) Me gustaría indicar que no se ponen en rojo todos los controles tipo textbox o combobox sino solo aquellos controles que tengan como origen del control el campo de la tabla. Ésta sería la clave que solo se coloren en rojo los controles, que sean los campos de la tabla. Se quiere realizar una acción x en controles de tipo textbox o combobox pero solo en aquéllos que tengan como origen del control el campo de la tabla, origen del formualrio. Claro... Esto pasado a VBA que es lo que no me sale. Tendría que cambiar la línea del IF para conseguirlo pero no acierto: IF Ctrl.Controlsource = "Select * From Libros Then Si alguien pudiera ayudarme, gracias de antemano |
|
deprofundis
|
|
![]() |
|
MexMan70 ![]() Colaborador ![]() Unido: 17/Julio/2007 Localización: DarkSide Estado: Sin conexión Puntos: 9233 |
![]() |
Para empezar, deberías cerrar la comilla que abre:
... = "Select * FROM Libros" Then Respecto a tu código, prueba asi: ... For each Ctrl in Frm.Controls Select Case Ctrl.ControlType Case acTextBox, acComboBox If Ctrl.Controlsource = "Select * From Libros" Then Ctrl.BackColor = vbRed Else Ctrl.BackColor = vbWhite End If End Case Next ... |
|
OneDrive: http://sdrv.ms/Vk6eJd
|
|
![]() |
|
deprofundis ![]() Habitual ![]() ![]() Unido: 18/Noviembre/2015 Localización: Madrid Estado: Sin conexión Puntos: 62 |
![]() |
Hola MexMan70
Lo de cerrar las comillas lo tenía bien en la Bd, ha sido un error al escribirlo aquí, lo de no cerrarlas. Lo que me indicas no me funciona,creo que falta el "End Select" en vez de "End Case"... En todo caso aunque se corrigiera eso, no colorea los controles que tienen como origen un campo de la tabla: If Ctrl.Controlsource = "Select * From Libros" Then En esta línea está el principal problema creo. Necesitaría que colorease solo los controles cuyo origen es un campo de la tabla LIBROS. y no todos los controles, textbox, combos que hay en el form y que algunos no tienen como origen esos campos. Un saludo y gracias por la ayuda |
|
deprofundis
|
|
![]() |
|
MexMan70 ![]() Colaborador ![]() Unido: 17/Julio/2007 Localización: DarkSide Estado: Sin conexión Puntos: 9233 |
![]() |
Efectivamente, es culpa mia por escribir al "vuelo". Corrige lo de End Case por End Select. Tambien corrige lo del ControlSource por RowSource.
![]() Tambien cambiaría un poco mas en la coincidencia así: If Ctrl.RowSource Like "*From Libros*" Then
Editado por MexMan70 - 18/Enero/2016 a las 23:43 |
|
OneDrive: http://sdrv.ms/Vk6eJd
|
|
![]() |
|
deprofundis ![]() Habitual ![]() ![]() Unido: 18/Noviembre/2015 Localización: Madrid Estado: Sin conexión Puntos: 62 |
![]() |
Hola MexMan70
Gracias por la ayuda No se trata solo de combos... por eso no vale Rowsource. Se trata de textbox y combos por eso pongo Ctrl.Controlsource. De todas formas sigue sin funcionar lo que me propones de: ... Like "* From LIBROS *" Then Un saludo y ya me cuentas |
|
deprofundis
|
|
![]() |
|
E. Feijoo ![]() Moderador ![]() Unido: 16/Abril/2004 Localización: España Estado: Sin conexión Puntos: 19948 |
![]() |
Curioso mensaje, lo anoto como del tipo "yo propongo una 'idea', el resto las soluciones" .....
Lo que se me antoja mas curioso es el planteamiento, hay un campo 'Existen' que parece ser de texto (no booleano como correspondería a una programación ética)y que debería ser el marcador adecuado para indicar si ese 'registro único en pantalla' cumple unas determinadas condiciones .... Si le añadimos a eso la pretensión de que 'un cuadro de texto' tenga como origen de datos una expresión SQL (Select * From ....) me hace pensar que algo no cumple las reglas de programación eficiente y ..... |
|
![]() |
|
jilo ![]() Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador ![]() Unido: 19/Diciembre/2004 Localización: TAFALLA Estado: Sin conexión Puntos: 900 |
![]() |
Hola,
Segun entiendo, lo que quieres es que los controles (todos los textBox y comboBox)de un formulario que no sean independientes, osea que el origen del control dependa de un campo del origen de datos del formulario. Esto quiere decir que cualquier control del formulario que no dependa de un campo del origen de datos del formulario, en su propiedad 'Origen del control' estará vacio. Entonces .... Esto te deberia funcionar. Ya comentaras.
Editado por jilo - 19/Enero/2016 a las 12:13 |
|
Espero te sirva !!!!!!
Iñaki |
|
![]() |
|
deprofundis ![]() Habitual ![]() ![]() Unido: 18/Noviembre/2015 Localización: Madrid Estado: Sin conexión Puntos: 62 |
![]() |
Hola
Lo que propongo no es una "idea" sino una duda que comparto con el resto de usuarios para ver si pueden ayudarme a solucionarla. Evidentemente si tengo una duda que no sé resolver no puedo dar la solución... Gracias Jilo Funciona correctamente tu respuesta poniendo "ctrl" para los controles: Sub PonerFondoRojo() '109=TextBox '111=ComboBox For Each ctl In Me.Controls If ctrl.ControlType = 109 Or ctrl.ControlType = 111 Then If Len(ctrl.ControlSource) > 0 Then ctrl.BackColor = vbRed End If End If Next End Sub Se puede cerrar el hilo |
|
deprofundis
|
|
![]() |
Responder ![]() |
|
Tweet
|
Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |