在访问vba

时间:2015-09-14 23:43:37

标签: forms access-vba ms-access-2007

我正在使用多个嵌套表单的Access应用程序,用户在其上单击选择以执行特定任务,例如,输入新数据,搜索数据,打印报告等。

目前,每个表格都设有自动中心。我希望用户能够移动主窗体,然后在主窗体的顶部打开所有其他窗体。表单通常作为对话框打开。

我刚刚添加了代码,以允许后续表单在与主表单相同的位置打开。主窗体的代码如下所示:

Private Sub File_Maint_Click()
Dim ObjName As String
FrmWinTop = Forms![Main Form].WindowTop
FrmWinLeft = Forms![Main Form].WindowLeft

ObjName = "File Maintenance Form"
If IsSuper Then DoCmd.OpenForm ObjName
If Not IsSuper Then DoCmd.OpenForm ObjName, acNormal, , , , acDialog

End Sub

每个后续表单都有如下代码:

Private Sub Form_Open(Cancel As Integer)

    Me.Move FrmWinLeft, FrmWinTop

End Sub

这很好用,除了 - 在正常操作中我通过打开主窗体的代码最小化Access窗口,然后主窗体的顶部和左边是一些不起眼的数字,这样当后续窗体打开时它是不可见。如果Access窗口可见,则代码可以正常工作。

显然,我的方法无法使用Access窗口最小化,只有对话框窗体显示,据我所知。当应用程序运行时,是否有一种不同的方法可以隐藏Access窗口,以便正确定位表单?或者是否有不同的方法在屏幕上定位表单,以便每个后续表单将覆盖打开它的先前表单?

非常感谢您阅读我的问题,并提供您可能有的任何想法。

2 个答案:

答案 0 :(得分:0)

将这些变量作为全局/公共变量移动到模块:

public OrderService(@InjectParam OrderValidationService service,
                    @InjectParam OrderCampaignService campaignService) {
        this.service = service;
        this.submissionErrorHandler = submissionErrorHandler;
        this.campaignService = campaignService;
    }

然后使用主窗体的OnActivate事件设置它们:

Public FrmWinTop  As Long
Public FrmWinLeft As Long

答案 1 :(得分:0)

我在下面找到了以下代码 http://www.access-programmers.co.uk/forums/showthread.php?t=218554

Function fSetAccessWindow(nCmdShow As Long)

Dim loX As Long
Dim loForm As Form
On Error Resume Next
Set loForm = Screen.ActiveForm

    If Err <> 0 Then
        loX = apiShowWindow(hWndAccessApp, nCmdShow)
        Err.Clear
    End If

    If nCmdShow = SW_SHOWMINIMIZED And loForm.Modal = True Then
        MsgBox "Cannot minimize Access with " _
        & (loForm.Caption + " ") _
        & "form on screen"
    ElseIf nCmdShow = SW_HIDE And loForm.PopUp <> True Then
        MsgBox "Cannot hide Access with " _
        & (loForm.Caption + " ") _
        & "form on screen"
    Else
        loX = apiShowWindow(hWndAccessApp, nCmdShow)
    End If
    fSetAccessWindow = (loX <> 0)

End Function

如果我使用此方法隐藏主Access窗口而不是将其设置为最小化,则位置值似乎可以正常工作。猜猜在发帖之前我应该​​多看一下。