2016-01-08 49 views
0

當VBA代碼執行時,我想停止表單的閃爍,但Application Echo不起作用。訪問 - 應用程序回聲不起作用

  1. 我有這樣的代碼在Combobox_After_Update事件:

    私人小組Combo11_AfterUpdate()

    'Stop flickering 
    Application.Echo False 
    
    On Error Resume Next 
    
        'If User deletes Combo Item, then delete record 
        If IsNull(Combo11) Then 
        DoCmd.SetWarnings False 
        DoCmd.RunCommand acCmdDeleteRecord 
        End If 
    
    'Call code for re-positioning controls on form 
    Call MovingAllControls 
    
    'Close and reopen form 
    Call ReOpen 
    
    Application.Echo True 
    
    End Sub 
    
  2. 調用的過程(這可能是閃爍的原因):

Sub MovingAllControls

'Refresh 
DoCmd.Requery 

Const MaxRecs As Integer = 10 
Dim NumRecs As Integer 

On Error Resume Next 

'find last record in subform and then expand Detail section according to number 'of records 

With Forms![MyForm]![MySubform].Form 
.Recordset.MoveLast 
NumRecs = .RecordsetClone.RecordCount 
If NumRecs > MaxRecs Then NumRecs = MaxRecs 
.InsideHeight = NumRecs * .Section(0).Height + 350 

End With 

'Moving all controls under subform - in this example only one, but in reality I 'have plenty controls to move on form 

Forms![MyForm]![FieldName].Top = Forms![MyForm]![Myubform].Top + Forms![MyForm]![MySubform].Form.InsideHeight + 1100 

End Sub 
  • 是從Combobox_After_Update事件調用另一個程序:

    小組重新打開()

    'I reopen form, because this is only way my subform controls moves as they 'should - dynamically 
    
    DoCmd.Close acForm, "MyForm" 
    DoCmd.OpenForm "MyForm" 
    
    End Sub 
    
  • 我也試圖看什麼錯誤在After_Update_event中產生,並且我得到錯誤「424 - 對象需要」,但是我的代碼執行得很好,唯一的問題是控件閃爍。任何其他方式來停止閃爍,或者我的代碼有什麼問題?

    感謝您的幫助!

    回答

    1

    不是Application.Echo False,嘗試Form.Painting方法:

    ' code under form 
    Me.Painting = False 
    
    ' do actions that cause flicker 
    
    Me.Painting = True 
    Me.Repaint 
    

    而且,看你的代碼在這裏:

    DoCmd.Close acForm, "MyForm" 
    DoCmd.OpenForm "MyForm" 
    

    我會說這是不好的做法:

    • 這即使是中等規模的記錄集也會導致性能問題。
    • 如果您使用像Form_OpenForm_Close這樣的事件,那麼當表單第一次打開時,這可能會通過重新運行僅運行一次的代碼導致錯誤。

    Access中總有一種方式可以在不關閉/重新打開表單的情況下獲得所需的結果。

    +0

    謝謝,我試過了,但代碼仍然有問題。在子窗體控件的第一次移動時,所有東西仍然閃爍,但隨後停止?!?現在你說Form_Open和Form_Close錯誤,我真的相信那裏有什麼不對。我的代碼實際上重新定位了Form_Load上的所有控件,我沒有在這裏發佈。當這個發佈的代碼被執行時,我必須再次執行Form_Load,這是所有控件正確刷新的唯一方法。我還能怎樣做動態刷新? – LuckyLuke82

    +0

    ** 1)**嘗試子窗體,父窗體或兩者中的「繪畫」代碼。 ** 2)**將控制位置代碼從「Form_Load」中移出,並放入其自己的子程序中,以便在需要時調用。 – kismert

    +0

    對不起,我已經有了Form_Load的控件定位代碼,我只是叫它。也許從Form_Current事件調用這個子例程會更好? – LuckyLuke82