Excel宏在宏完成且工作表锁定后尝试进行更改

0ejtzxu1  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(147)

我一直在保护Excel文档不被编辑,因为用户不断破坏它。虽然这个Excel文档不应该能够被打破,这容易摆在首位;修理它超出了我的能力范围。我只是来提供一个临时的解决方案。

问题当用户执行刷新宏时,会将工作表锁定为fast;反过来,它给出了一个错误,它不能进行更改,因为单元格或图表是受保护的。奇怪的是,锁定工作表的模块只在最后执行。有人知道为什么会这样吗?
我的密码

Sub Verversen()
'
' Verversen Macro
'
Call Module11.unlockcells
    Range("J12").Select
    ActiveWorkbook.RefreshAll
    ActiveWorkbook.Worksheets("Batch Checker").ListObjects("AllStockSQL").Sort. _
        SortFields.Clear
    ActiveWorkbook.Worksheets("Batch Checker").ListObjects("AllStockSQL").Sort. _
        SortFields.Add Key:=Range("AllStockSQL[[#Headers],[#Data],[Batch]]"), SortOn _
        :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Batch Checker").ListObjects("AllStockSQL").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'Call Module12.Refresh_All_Data_Connections
'   Range("G31").Select
    ActiveSheet.PivotTables("PivotTable4").PivotCache.Refresh
    ActiveSheet.PivotTables("PivotTable5").PivotCache.Refresh
'   ActiveWorkbook.RefreshAll
Call Module9.lockcells
End Sub

模块9

Public Sub lockcells()

Worksheets("Batch Checker").Range("F4:N200").Locked = True
ActiveSheet.Protect Password:="temp", UserInterfaceOnly:=True, AllowUsingPivotTables:=True

End Sub

模块11

Public Sub unlockcells()

ActiveSheet.UNprotect Password:="temp"
Worksheets("Batch Checker").Range("F4:N200").Locked = False

End Sub

我试过设置一个等待计时器;我已经关闭了后台刷新,除了在“全部刷新”上的“刷新此连接”选项;我以前试过放DoEvent;我试过创建不同的模块,我会调用在没有工作,可能我忽略了一些简单的,因为我是一个相当的VBA新手。

e4yzc0pl

e4yzc0pl1#

解决方案由Emilio Silva提供。
在锁定模块锁定之前,我将Application.CalculateFull和Application. CalculateUntilAsyncQueriesDone放入其中。

模块9

Public Sub lockcells()
    Application.CalculateFull
    Application.CalculateUntilAsyncQueriesDone
    Worksheets("Batch Checker").Range("A4:N200").Locked = True
    Worksheets("Batch Checker").Protect Password:="REDacted", UserInterfaceOnly:=True, AllowUsingPivotTables:=True
End Sub

相关问题