es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pasando variable a DoCmd.MoveSize para mover formularios.

Estoy tratando de mantener uniforme la posición de todos los formularios al cambiar entre ellos, pero cuando llamo el código en una función, MaxSize no funciona.

Esto registra los valores de WindowLeft y WindowTop en una tabla, y lo ejecuto justo antes de cerrar cualquier formulario.

Function recordFormPosition(frm As Form)

    On Error GoTo Error
    DoCmd.SetWarnings False

    'Tabla          Campo            Posición de ventana
    DoCmd.RunSQL "UPDATE FormPosition SET FormTop = """ & frm.WindowTop & """"
    DoCmd.RunSQL "UPDATE FormPosition SET FormLeft = """ & frm.WindowLeft & """"
    DoCmd.SetWarnings True
    Exit Function

Error:
    MsgBox "Error"
End Function

Esta función se llama en cualquier Form_Load para establecer la posición del formulario según lo registrado en la tabla.

Function setFormPosition(frm As Form)

    Dim db As DAO.Database
    Set db = CurrentDb
    Dim tp As DAO.Recordset
    Dim lft As DAO.Recordset
    Dim wintop As String
    Dim winleft As String

    'Establece la ubicación del formulario
    wintop = "SELECT FormTop FROM FormPosition WHERE ID = 1"
    winleft = "SELECT FormLeft FROM FormPosition WHERE ID = 1"

    Set tp = db.OpenRecordset(wintop)
    Set lft = db.OpenRecordset(winleft)

    frm.DoCmd.MoveSize tp.Fields(0).Value, lft.Fields(0).Value

End Function

Y uso esto para llamar a la función y pasar la variable del formulario.

Call setFormPosition([Form]) o Call recordFormPosition([Form])

Mi problema está en esta línea:

DoCmd.MoveSize tp.Fields(0).Value, lft.Fields(0).Value

¿Dónde paso la variable frm? Sigo obteniendo el error: Una expresión en el argumento 2 tiene un valor no válido, pero estoy pasando 2 enteros desde una tabla que está formateada como números. Hice algunas pruebas de depuración y pasé tp.Fields(0).Value & lft.Fields(0).Value en msgbox y puedo verificar que están devolviendo números, así que la única explicación es que debe ser un problema de enfoque.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede estar en el enfoque de la variable de formulario en la función setFormPosition. Intenta pasar la variable frm como argumento en la llamada a la función, de esta manera:

    Call setFormPosition(Me.Form)
    

    Luego, en la función setFormPosition, reemplaza:

    frm.DoCmd.MoveSize tp.Fields(0).Value, lft.Fields(0).Value
    

    con:

    frm.Move tp.Fields(0).Value, lft.Fields(0).Value
    

    Esto debería asegurarse de que la variable de formulario esté en foco y que el método Move se aplique correctamente a ella.

Comments are closed.