无法在UserInterFaceOnly设置为True时执行代码

时间:2013-11-06 05:26:13

标签: excel-vba vba excel

我有这段代码:

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

也根本不执行。

2 个答案:

答案 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标志肯定不会像我期望的那样工作。一般来说,我设置了它,但我经常发现我必须使用unprotectprotect来组合内容。每当我收到错误或没有做某事时,我首先尝试。

我为缺乏具体细节而道歉,我将在调查我的代码后稍后回复。老实说,由于缺乏VBA文档,我通常很忙于试错,我还没有时间记录这种行为。但我会在不久的将来。

但与此同时,我也尝试确保对象引用尽可能合格,因此,在您的情况下,我会尝试:

Thisworkbook.Refreshall

或者

Application.Thisworkbook.Refreshall

或者甚至可能

application.workbooks(application.thisworkbook.name)

如果失败,请使用unprotect/protect contents:=True, userinterfaceonly:=True

括起来