2015-06-24 24 views
1

我在Access中是個新手,在實現某些功能時遇到了一些困難,我在其他文章中看到過。 MS-Access: How to open form in same location/size as closed/previous form?打開MS Access表單或在上次關閉時的相同位置報告

我想在上次關閉的位置打開彈出式窗體,並且創建了一個表(sizpos)來存儲位置和大小(左,上,寬,高)的4個屬性)和表單(對象)的名稱和唯一的ID號碼。

我需要一些幫助,找出VBA代碼來存儲基於關閉或卸載事件上的表單名稱的打開表單的屬性。我還需要代碼的幫助來從開放表單或加載事件的表格中檢索信息。

我嘗試使用dlookupme.move並沒有任何成功,但可能沒有正確實施它。

我想出了以下幾乎適用於報告。我只是無法弄清楚如何從正在打開的報告中拉取報告名稱,類似於表單中的me.name函數。我注意到me.reportname這些區域?

Private Sub Report_Open(Cancel As Integer) 
Dim l As Long 
Dim t As Long 
l = Nz(DLookup("Left", "SizPos", "Object = 'me.reportname???'")) 
t = Nz(DLookup("Top", "SizPos", "Object = 'me.reportname???'")) 
Me.Move Left:=l, Top:=t 
End Sub 

Private Sub Report_Close() 
Dim strSQL As String 
strSQL = "UPDATE SizPos SET SizPos.Left = " & Me.WindowLeft & ", SizPos.Top = " & Me.WindowTop & " WHERE SizPos.Object = 'me.reportname???';" 
CurrentDb.Execute strSQL 
End Sub 

以下對於窗體非常適用。

Private Sub Form_Open(Cancel As Integer) 
Dim l As Long 
Dim t As Long 
Dim w As Long 
Dim h As Long 
l = Nz(DLookup("Left", "SizPos", "Object = '" & Me.Name & "'")) 
t = Nz(DLookup("Top", "SizPos", "Object = '" & Me.Name & "'")) 
w = Nz(DLookup("Width", "SizPos", "Object = '" & Me.Name & "'")) 
h = Nz(DLookup("Height", "SizPos", "Object = '" & Me.Name & "'")) 
Me.Move Left:=l, Top:=t, Width:=w, Height:=h 
End Sub 

Private Sub Form_Close() 
DoCmd.Save 
Dim strSQL As String 
strSQL = "UPDATE SizPos SET SizPos.Left = " & Me.WindowLeft & ", SizPos.Top = " & Me.WindowTop & ", SizPos.Width = " & Me.WindowWidth & ", SizPos.Height = " & Me.WindowHeight & " WHERE SizPos.Object = '" & Me.Name & "';" 
CurrentDb.Execute strSQL 
End Sub 
+0

沒有'REPORTNAME財產。使用'Me.Name'來獲取報告的名稱。 'Me.Name'可以在表單或報告中使用。 – HansUp

回答

1

使用的DAO.Recordset而不是4 DLookup語句來獲取該對象的大小和位置值。您也可以使用DAO.Recordset以後存儲它們,而不是構建和執行UPDATEINSERT語句。

這是我sizpos表:

CREATE TABLE sizpos (
    id COUNTER PRIMARY KEY, 
    obj_name TEXT(255) UNIQUE, 
    lft INTEGER, 
    tp INTEGER, 
    wdth INTEGER, 
    hght INTEGER 
    ); 

我創建一個參數查詢爲給定的形式獲取存儲的大小和位置值或報告名稱:

PARAMETERS which_object Text (255); 
SELECT s.obj_name, s.lft, s.tp, s.wdth, s.hght 
FROM sizpos AS s 
WHERE s.form_name=[which_object]; 

我可以已將其保存爲命名查詢。但我創建了一個函數,SelectObjectSettings,返回該語句文本。

因此,在表單加載,我可以將表單的名稱提供給該查詢,並打開DAO.Recordset查詢的結果。然後,如果記錄不爲空,使用記錄的值來設置窗體的大小和位置:

Private Sub Form_Load() 
    Dim db As DAO.Database 
    Dim qdf As DAO.QueryDef 
    Dim rs As DAO.Recordset 

    Set db = CurrentDb 
    Set qdf = db.CreateQueryDef(vbNullString, SelectObjectSettings) 
    qdf.Parameters("which_object").Value = Me.Name 
    Set rs = qdf.OpenRecordset 
    With rs 
     If Not (.BOF And .EOF) Then 
      Me.Move Left:=!lft, Top:=!tp, Width:=!wdth, Height:=!hght 
     End If 
    End With 

    Set rs = Nothing 
    Set qdf = Nothing 
    Set db = Nothing 

End Sub 

注意:如果你有一個保存的參數查詢,可以Set qdf到...

'Set qdf = db.CreateQueryDef(vbNullString, SelectObjectSettings) 
Set qdf = db.QueryDefs("YourQueryName") 

窗體卸載,保存表單的大小和位置:

Private Sub Form_Unload(Cancel As Integer) 
    Dim db As DAO.Database 
    Dim qdf As DAO.QueryDef 
    Dim rs As DAO.Recordset 

    Set db = CurrentDb 
    Set qdf = db.CreateQueryDef(vbNullString, SelectObjectSettings) 
    qdf.Parameters("which_object").Value = Me.Name 
    Set rs = qdf.OpenRecordset 
    With rs 
     If (.BOF And .EOF) Then 
      ' no existing record for this object; create one 
      .AddNew 
      !obj_name = Me.Name 
     Else 
      ' a record exists for this object; edit it 
      .Edit 
     End If 
     !lft = Me.WindowLeft 
     !tp = Me.WindowTop 
     !wdth = Me.WindowWidth 
     !hght = Me.WindowHeight 
     .Update 
     .Close 
    End With 

    Set rs = Nothing 
    Set qdf = Nothing 
    Set db = Nothing 

End Sub 
+1

我一直無法讓這個工作成功。你如何創建你的功能?我試圖調用保存的查詢並直接調用查詢參數,如下所示,但保持獲取的參數太少。預期1. Set rs = db.OpenRecordset(「SELECT s.left,s.top,s.width,s.height FROM SizPos AS s WHERE s.object =」&Me.Name) – William

+1

如果您想要做這樣,你需要在'Me.Name'周圍添加引號...... Set rs = db.OpenRecordset(「SELECT s.left,s.top,s.width,s.height FROM SizPos AS s WHERE s .object ='「&Me.Name&」'「)' – HansUp

+0

我添加了一個更新以顯示如何使用保存的參數查詢。 – HansUp

相關問題