Agregar campos al un formulario mediante botón

Actualmente tengo una tabla llamada "indicaciones" vinculada a un formulario llamado f_indicaciones. La tabla tiene varios campos llamados sucesivamente "Farmaco_1", "Farmaco_2" etc...

Al abrirse el formulario, le mismo muestra solo el campo (que es un combobox) "Farmaco_1", el resto están por defecto ocultos. Mediante un ÚNICO botón de acción quiero que al ir presionándolo sucesivamente, los campos "Farmaco_x" se vayan haciendo visibles.

A su vez, tener otro botón de acción que oculte sucesivamente los campos, pero también borre de la tabla los datos almacenados en ese campo que se esta "ocultando". Algo así como un CurrentDb.Execute "DELETE * FROM Indicaciones (Famaco_x) VALUES ('" & Me.Farmaco_X & "')"

Lo puedo hacer acualmente con la funcion me.faraco_x.visible=true/false, pero me encuentro con el problema de que tengo que crear un boton para cada vez que se quiere agregar/ocultar un campo y a su vez al ocultarse no se como ni donde deberia ir la parte de Delete from...

1 respuesta

Respuesta
2

Lo de ocultar no tiene problema. Supongamos que en vista diseño del formulario le añades un cuadro de texto Contador, que estaría oculto, pero te lo dejo visible para que veas como trabaja. Como no sé como trabajas, en el evento Al abrir el formulario le pongo

contador=1

Como dices que el control Farmaco1 siempre está visible cuando pulso el botón

Cuando vuelvo a pulsar el botón

Y así hasta que te canses, el código del botón es

Vamos con lo de ocultar. Aquí no me ha quedado claro si es en orden inverso a los que has mostrado, o es algún control en particular, sin orden ninguno.

¡Gracias! Funciona, suma los cuadros tal cual, el tema es al hacerlo a la inversa, le pongo contador - 1 y el valor en false, hasta ahí vamos bien, pero no me borra el ultimo que agregue, comienza a borrar desde el anteultimo.

Private Sub restar_Click()
Contador = Contador - 1
For Each Control In Form.Controls
If Control.ControlName = "Farmaco_" & Contador Then
Control.Visible = False
End If
Next
End Sub

Además, se puede establecer un máximo de cuenta, o sea, ¿un tope de suma y un tope de resta?

Es lógico, ten en cuenta que primero le estás diciendo que le reste 1, por tanto, si contador, por ejemplo, estaba en 6, le estas diciendo que le reste 1 o sea 5 y te oculta el cinco. La instrucción hay que ponerla a la inversa

for each.....

...

next

contador=contador-1

Es decir, que primero te oculte el "último" y que luego te reste 1

Vamos a ver, ¿no tenía que mostrar del 2 en adelante?

Si se puede

Después de contador=contador+1 se pone

If contador<=6 then

for each....

O también

contador=contador+1

if contador=6 then

contador=1

Todo depende de que se quiera hacer.

Private Sub agregar_Click()
Contador = Contador + 1
If Contador <= 15 Then
For Each Control In Form.Controls
If Control.ControlName = "Farmaco_" & Contador Then
Control.Visible = True
End If
Next
End Sub

Me queda asi, pero me dice Error de compilacion (bloque If sin end if) No entiendo donde me etoy equivocando.

Lo que quisiera es que el contador frene en 0 como mínimo al restar y en 15 como máximo al sumar

La condición If se cierra con End If, si te tomas la molestia de contar los If que tienes puestos verás que hay 2 pero sólo tienes puesto un End if. Entre Next y end sub tiene que ir otro

Ahhhhh que zapallo, yo ponia el segundo End if antes del Next. Bueno ahora que lo pruebo, se ve que no fui claro. Al referirme al limite del contador, me refiero a que al presionar el botón solo sume hasta 15 el contador (el que va a estar invisible).

Pon el código del botón como

Contador = Contador + 1
If Contador <= 15 Then
For Each Control In Form.Controls
If Control.ControlName = "farmaco" & Contador Then
Control.Visible = True
End If
Next
Else
Exit Sub
End If

El código del botón Ocultar es

If Contador > 0 Then
For Each Control In Form.Controls
If Control.ControlName = "farmaco" & Contador Then
Control.Visible = False
End If
Next
Else
Exit Sub
End If
Contador = Contador - 1

Sigue igual. Agregar solo se agregan 15 campos (porque son los que hay en la tabla). Yo lo que quisiera es evitar que el contador siga sumando al seguir presionando el boton. Ponerle un limite al contador, los campos se autolimitan ya que son solo 15. Esoeri ser claro, y ante todo gracias por la paciencia Icue

El que resta, tiene su tope en 0, pero no cambia a False los campos visibles. Me perdí... no entiendo nada, perdón ja ja.

Si antes de que te conteste ya estás cambiando la pregunta no vamos a ningún lado. Para que no siga sumando a partir de 15 pon el código del botón Mostrar

If Contador < 15 Then
Contador = Contador + 1

For Each Control In Form.Controls
If Control.ControlName = "farmaco" & Contador Then
Control.Visible = True
End If
Next
ElseIf Contador > 15 Then
Contador.Enabled = False
Exit Sub
End If

¡Gracias! Icue, excelente funciono a la perfección. Ante todo perdón pero es que soy muy inquieto y ansioso ja ja. El código funciono a la perfección!

Para el que resta, use esto y funciona bien!

Private Sub restar_Click()
For Each Control In Form.Controls
If Control.ControlName = "Farmaco_" & Contador Then
Control.Visible = False
End If
Next
Contador = Contador - 1
If Contador = -1 Then
Me.Contador.Value = 0
MsgBox "Ha eliminado todos los farmacos", vbExclamation, "Gestion de pacientes JANIES"
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas