Texbox en formulario que tome datos de otro formulario

Tengo un formulario continuo que se llama PERIODO en el cual hay un campo que se llama NUM_REGISTRO. En cada linea tengo puesto un botón para que me abra una nuevo formulario que se llama PERIODO_NUEVO y en el cual aparecen estos cuatro campos en blanco para poder grabar "a mano" pero me gustaría y aquí mi consulta es que cuando se abra dicho formulario me aparezca en el texbox del formulario PERIODO_NUEVO el numero de registro. Es decir que si pulso en el boton que está en la primera fila me saliera en el nuevo formulario todos los campos para grabar excepto el campo NUM_REGISTRO que ya saldría por defecto. El botón se llama btnNuevo. Muchas gracias.

3 Respuestas

Respuesta
1

Le complemento con esto. Prefiero utilizar variables públicas cuando deba pasar más de un campo al formulario que se llama. Tenga cuidado cuando abre el formulario hijo puede recibir el mensaje "No se puede actualizar el registro..."

Public lnID As Long
Public strCodigo As String

En este ejemplo voy a pasar al formulario el contenido de los campos  ID y Codigo.

FORMULARIO PRINCIPAL

Voy a pasar el registro seleccionado al formulario hijo. Al hacer clic sobre el botón formulario obtengo.

FORMULARIO HIJO

TABLA DEL FORMULARIO HIJO

CÓDIGO DE LOS EVENTOS

Formulario Padre

Evento Al hacer clic sobre el botón formulario.

Private Sub btnAbreForm_Click()
 If Not IsNull(Me.id) And Not IsNull(Me.codigo) Then
  lnID = Me.id
  strCodigo = Me.codigo
  DoCmd.OpenForm "frmHijo"
 End If
End Sub

Formulario hijo evento Al abrir.

Private Sub Form_Open(Cancel As Integer)
    DoCmd.GoToRecord , , acNewRec
    Me.id = lnID
    Me.codigo = strCodigo
    DoCmd.RunCommand acCmdSaveRecord
End Sub

No se requiere verificar si el formulario está cargado porque lo está por lógica, ya que desde este se hace la llamada.

Respuesta
1

En las propiedades del botón del formulario Periodos que te abre el otro, en la solapa Eventos-Al hacer clic crea un procedimiento de evento y entre Private Sub y End sub escribe

Docmd.openform"periodo_nuevo",,,,acformadd,acdialog

Y en las propiedades del formulario Periodo_nuevo, en la solapa Eventos-Al activar el registro crea un procedimiento de evento y entre Private Sub... y End sub escribe

If currentproject.allforms("periodo").isloaded then

NumRegistro=forms!periodo!numregistro

end if

Me explico. Cuando pulsas el botón del formulario Periodo te abre el formulario Periodo_nuevo en un registro nuevo. Por otro lado, en el formulario Periodo nuevo le estás diciendo que si el formulario Periodo está cargado( que sí lo está, ya que lo has abierto desde él), el valor del campo NumRegistro sea igual al que figura en control NumRegistro del formulario de donde vienes.

También podrías usar, en el formulario Periodo nuevo lo de

Numregistro.defaultvalue=....

Pero creo que es mejor lo otro, ya que sólo "actúa", cuando lo abras desde el formulario Periodo.

Respuesta
1

En los formularios continuos, el registro activo es el único que es 'real' el resto lo serán (uno a uno) cuando les corresponda.

En base a ello las opciones son:
-. Una macro con la sentencia 'establecer valor' (se utilizaría desde el formulario 'periodo_nuevo')
-. Utilizar VBA y adjudicarle el valor del campo del formulario actual

Su ruta absoluta (la del campo a copiar) seria:
Forms.Periodo.num_registro 
Forms --> referencia a la colección de formularios
Periodo --> nombre del formulario
Num_registro --> objeto del formulario con el valor a copiar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas