我在工作簿的两张表中嵌入了一个worksheet_change宏。它们在那里是为了防止任何人更改工作表。但是,我仍然希望每隔一段时间刷新工作表中的数据。这是行不通的。
工作簿中的两个工作表通过查询连接到另一个工作簿。从本质上讲,这些工作表是其他工作簿中工作表的副本。 我已经将 Code1 嵌入到两个工作表中。这是为了防止任何人对工作表进行更改,但仍然允许他们查看工作表并从中复制数据。它会弹出一个消息框,然后撤消用户所做的更改。效果很好,对此我感到满意。
同时,我希望能够刷新工作簿,以便已连接的工作表相对于与其连接的其他工作簿而言是最新的。
为此,我在工作簿中添加了一个名为“刷新”的按钮。此按钮调用 Code2 。这样做是为了禁用事件,以便暂停worksheet_change宏以允许刷新数据。
但是,这不起作用,因为worksheet_change宏仍然有效。即,单击按钮后,工作簿将刷新并然后撤消任何更新并显示消息框,这不是我所需要的。
CODE1
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("A1:Z1000")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
' Display a message when one of the designated cells has been
' changed.
' Place your code here.
MsgBox "DO NOT MODIFY THIS SHEET - Any necessary modifications should be made in 'Master Invoice Template' and this sheet will automatically be updated!"
End If
End Sub
CODE2
Sub refresh()
On Error GoTo ErrorHandler
Application.EnableEvents = False
ThisWorkbook.RefreshAll
ErrorHandler:
Application.EnableEvents = True
End Sub
我在互联网上搜寻解决方案,发现的所有内容几乎都指向enableevents = false的方向,但是如我的帖子所述,这是行不通的。我是否需要更改解决问题的方法,或者我在代码中做错了什么?
我怀疑撤消代码是导致此问题的原因,但我不确定!
任何帮助将不胜感激!
答案 0 :(得分:0)
我想我已经弄清楚了代码出了什么问题;如果我错了,请纠正我。运行 Code2 时,刷新数据所需的时间太长。这意味着代码2 中的Application.EnableEvents = Ture
在完全刷新数据之前生效,并且当它最终完成更新时,触发了Worksheet_Change
事件。
我在DoEvents
命令之后尝试使用RefreshAll
,但这也不起作用。我已使用在this post中找到的内容来解决此问题,并且刷新按钮现在可以使用了!
具体的帮助代码如下:我将 Code2 替换为:
Sub Refresh_All_Data_Connections()
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
'Set background-refresh value back to original value
objConnection.OLEDBConnection.BackgroundQuery = bBackground
Next
MsgBox "Finished refreshing all data connections"
End Sub
请让我知道我在解释为什么代码不起作用时的逻辑是否正确-我对VBA还是陌生的,并且希望完全理解该问题!