我有这段代码:
Private Sub Workbook_Open()
Dim wSheet As Worksheet
For Each wSheet In Worksheets
wSheet.Protect Password:="Wordpass", _
UserInterFaceOnly:=True
Next wSheet
End Sub
它保护工作簿中的所有工作表,但允许宏运行 但是,这段代码:
wb.RefreshAll 'I've declared and set wb accordingly.
即使UserIntergFaceOnly
设置为True
,也根本不执行。
答案 0 :(得分:1)
试试这个
Private Sub Workbook_Open()
Dim wSheet As Worksheet
Dim pt As PivotTable
For Each wSheet In Worksheets
wSheet.Protect Password:="Wordpass", _
UserInterFaceOnly:=True
Next wSheet
End Sub
'~~> Change "Sheet1" to the relevant sheet which has the pivot
Sub UpdatePivot()
With ThisWorkbook.Sheets("Sheet1")
For Each pt In .PivotTables
pt.RefreshTable
DoEvents
Next pt
End With
End Sub
答案 1 :(得分:1)
userinterfaceonly
标志肯定不会像我期望的那样工作。一般来说,我设置了它,但我经常发现我必须使用unprotect
和protect
来组合内容。每当我收到错误或没有做某事时,我首先尝试。
我为缺乏具体细节而道歉,我将在调查我的代码后稍后回复。老实说,由于缺乏VBA文档,我通常很忙于试错,我还没有时间记录这种行为。但我会在不久的将来。
但与此同时,我也尝试确保对象引用尽可能合格,因此,在您的情况下,我会尝试:
Thisworkbook.Refreshall
或者
Application.Thisworkbook.Refreshall
或者甚至可能
application.workbooks(application.thisworkbook.name)
如果失败,请使用unprotect/protect contents:=True, userinterfaceonly:=True