Worksheet.RefreshAll触发工作表更改事件 - 如何阻止这种情况发生?

时间:2014-10-13 17:22:48

标签: excel vba excel-vba

我有一个excel工作表,用作访问数据库前端。当用户更改单元格中的数据时,它将运行Worksheet_changed事件以运行更新访问数据库的代码。

然而 - 我还有一个刷新按钮,你猜对了,刷新了电子表格。这也会导致workheet_changed事件运行,这有时会导致程序错误。

Private Sub RefreshButton_Click()

Refreshbuttons
ActiveWorkbook.RefreshAll

End Sub

如何在按下刷新按钮时停止工作表更改事件的发生?我已经尝试了一个布尔标志,它会在按下刷新按钮时停止工作表更改事件的运行 - 但它会阻止它运行(我所做的例子)

Private Sub RefreshButton_Click()

Dim Flag as Boolean

Flag = True

Refreshbuttons
ActiveWorkbook.RefreshAll

Flag = False 

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Flag = true then
Exit Sub
Else

[...] {Rest of code below here}

我被困 - 任何帮助都非常感谢!!!

谢谢,

修改 谢谢蒂姆!你指出我正确的方向。我结束了(下面的代码),它工作得很漂亮。我感谢大家的帮助!

Private Sub RefreshButton_Click()

For Each objConnection In ThisWorkbook.Connections
    'Get current background-refresh value
    bBackground = objConnection.OLEDBConnection.BackgroundQuery

    'Temporarily disable background-refresh
    objConnection.OLEDBConnection.BackgroundQuery = False

    'Refresh this connection
    objConnection.Refresh
    If ActiveSheet.FilterMode = True Then
     ActiveSheet.ShowAllData
        Else
    End If
    'Set background-refresh value back to original value
    objConnection.OLEDBConnection.BackgroundQuery = bBackground
Next

MsgBox "Refresh Complete"

End Sub

3 个答案:

答案 0 :(得分:0)

将Flag标记为全局,如下所示。它应该工作。

Public Flag as Boolean

答案 1 :(得分:0)

所有办公应用程序都有内置函数来控制此行为。只需添加: Application.EnableEvents = FalseRefreshButton_Click事件的开头{。}} Application.EnableEvents = True到活动结束时。

答案 2 :(得分:0)

Private Sub RefreshButton_Click()

    On Error Goto haveError

    Refreshbuttons
    Application.EnableEvents = False
    ActiveWorkbook.RefreshAll

    haveError:
    Application.EnableEvents = True

End Sub