Establecer valor en columna de un subformulario

Tengo un formulario que filtra los registros de un subformulario en vista de hoja de datos. La idea es poner un botón "ASIGNARTIPOMOV" que establezca el valor del campo ASIGNARTIPO en el campo del subformulario TIPOMOVIMIENTO cuando éste no tenga ningún valor (es decir, sea nulo). He creado una macro que con una condición SI y EstablecerValor que sólo me cambia el primer registro. Necesitaría que haga lo mismo en el resto de registros del subformulario. Supongo que se podría hacer algo en VisualBasic, pero no controlo mucho el tema.

Lo que tengo hecho es:

Si [Formularios]![FILTRO_TIPOMOVIMIENTO Formulario]![FILTROMOVIMIENTOS Formulario].[Formulario]![TIPOMOVIMIENTO] Es Nulo

EstablecerValor

Elemento= [Formularios]![FILTRO_TIPOMOVIMIENTO Formulario]![FILTROMOVIMIENTOS Formulario].[Formulario]![TIPOMOVIMIENTO]

Expresión=[Formularios]![FILTRO_TIPOMOVIMIENTO Formulario]![ASIGNARTIPO]

Agradecería que alguien me ayudara a solucionar el problema y poder seguir con mi proyecto.

1 Respuesta

Respuesta
1

Puedes hacerlo de mil formas. Por ejemplo, vamos a suponer que el subformulario depende de la tabla DetalleVenta

1º En las propiedades del botón-Eventos-Al hacer clic, con el generador crear un procedimiento de evento y entre Private Sub y End Sub poner

docmd.setwarnings false

docmd.runsql"update detalleventa set AsignarTipo=""lo que quieras que ponga"" where asignartipo is null"

me.tipomovimiento.form.requery

Me explico, la primera línea es para que no aparezca la ventana de "Va a actualizar..."

La segunda le dice que actualice el campo Asignar tipo al valor " lo que quieras", en aquellos registros en que el valor del campo AsignarTipo sea nulo

y la última hace que el subformulario "reconsulte" su origen de datos.

2º Otra forma. Podrías poner en dicho evento del botón

Dim i as integer

Docmd.gotorecord,,acfirst

for i=1 to me.recordset.recordcount

if isnull([asignartipo]) then

asignartipo="Hola, buenos días"

end if

docmd.gotorecord,,acnext

next

Lo que hace es irse al primer registro y comprobar si AsignarTipo es nulo, si lo es, lo deja como Hola Buenos días. Si no lo es no hace nada. Se va al siguiente registro y lo mismo. Y así hasta el último.

Y todavía hay más formas.

Buenas tardes:

Hasta hoy no he podido ponerme con este proyecto y he estado probando las dos opciones que me das.

He configurado la primera opción y se sitúa en el primer registro, pero no hace nada.

La segunda opción me da error 91 en tiempo de ejecución "variable de objeto o bloque with no establecido"

Private Sub ASIGNARTIPOMOVIMIENTO_Click()
Dim i As Integer
DoCmd.GoToRecord , , acFirst
For i = 1 To Me.Recordset.RecordCount --> Error de ejecución 
If IsNull([tipomovimiento]) Then
tipomovimiento = "asignartipo"
End If
DoCmd.GoToRecord , , acNext
Next
End Sub

  No sé si es que estoy llamando mal algún campo o cuál es el error. 

FORMULARIO PRINCIPAL : FILTRO_TIPOMOVIMIENTO Formulario -> Contiene el campo con el valor a establecer ASIGNARTIPO 

SUBFORMULARIO : FILTROMOVIMIENTOS Formulario -> Contiene el campo a actualizar TIPOMOVIMIENTO

CONSULTA: FILTROMOVIMIENTOS Consulta -> Consulta de la que depende el subformulario.

Agradecería que me indicaras qué estoy haciendo mal.

Un saludo.

Si quieres, repito, si quieres haz una copia de tu base, con dos o tres registros inventados y me la envías a [email protected] , la miro y te digo donde puede estar el error. Es mejor que estar suponiendo.

Si lo haces, en el asunto del mensaje pon tu alias Ana María FV., ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas