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.
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:
Luego, en la función setFormPosition, reemplaza:
con:
Esto debería asegurarse de que la variable de formulario esté en foco y que el método Move se aplique correctamente a ella.