0

我试图在所有表单之间切换时保持所有表单的位置一致,但是在函数中调用代码时,MaxSize 不起作用。

这将 WindowLeft 和 WindowTop 值记录在一个表中,我在任何表单关闭之前运行它。

Function recordFormPosition(frm As Form)

On Error GoTo Error
    DoCmd.SetWarnings False

                          'Table           Field          Window position
    DoCmd.RunSQL "UPDATE FormPosition SET FormTop = """ & frm.WindowTop & """"
    DoCmd.RunSQL "UPDATE FormPosition SET FormLeft = """ & frm.WindowLeft & """"
    DoCmd.SetWarnings True
    Exit Function

debug
Error:
MsgBox ("Error")
End Function

在任何 Form_Load 上调用此函数以将表单设置为记录在表中的位置

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

    'Sets location of form
    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

我用它来调用函数并传递表单变量

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

我的问题是这一行:

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

我在哪里通过frm。多变的?我不断收到错误消息:参数 2 中的表达式具有无效值,但我从格式化为数字的表中传递了 2 个整数。我做了一些调试并在 msgbox 中传递了 tp.Fields(0).Value & lft.Fields(0).Value 并且可以验证它们是否返回数字,所以唯一的解释是它必须是一个焦点问题

4

0 回答 0