保护Excel工作表为只读但启用外部数据刷新

nqwrtyyt  于 2023-04-22  发布在  其他
关注(0)|答案(4)|浏览(227)

我有一个Excel 2010工作簿。一个工作表从外部数据连接(SQL查询)导入数据。我还向工作表添加了其他列,以对数据执行计算并对其进行一些处理。工作表构成了其他工作表中使用的原始数据的 Backbone.js 。
我想保护工作表,使其成为只读(允许使用排序、筛选、透视表)。我知道如何使用保护工作表功能来执行此操作。但当工作表受到保护时,我无法使用“刷新”按钮从源刷新数据,我希望用户能够执行此操作。我打算将连接属性配置为打开时自动刷新,并允许手动刷新。
有没有人找到一种优雅的方法来启用保护工作表功能并启用外部数据刷新,而不允许用户自己更改单元格值?

bsxbgnwa

bsxbgnwa1#

根据Pankaj的建议,我做了以下的事情(虽然我不认为这是非常优雅的,但仍然认为一定有更好的方法)。
我为工作簿创建了一个新宏。

Sub RefreshData()
'
' RefreshData Macro
'
Application.ScreenUpdating = False
Sheets("sheetname").Unprotect Password:="password"
ActiveWorkbook.Connections("connection name").Refresh
Sheets("sheetname").Protect _
Password:="password", _
UserInterfaceOnly:=True, _
AllowFiltering:=True, _
AllowSorting:=True, _
AllowUsingPivotTables:=True
End Sub

然后在VBA工程中打开ThisWorkbook,并编辑Workbook Open例程。

Private Sub Workbook_Open()
RefreshData
End Sub

有关保护选项的更多信息,请参阅此处:http://datapigtechnologies.com/blog/index.php/worksheet-protection-best-practice/
它的工作原理是:每次打开工作簿并刷新数据时,工作表都会被锁定。UserInterfaceOnly属性对刷新数据的命令没有影响(尽管它应该对其他宏事件有影响)。您仍然需要专门解锁电子表格,执行数据刷新,然后再次锁定工作表。
我在另一个工作表上添加了一个表单按钮,并将其链接到我的 RefreshData 宏,以便可以手动刷新数据,而工作表被锁定。
我在连接属性中做的另一件事是在后台刷新时删除刻度。

nhjlsmyf

nhjlsmyf2#

一个简单的方法是添加一个自定义按钮并编写一个宏,当用户按下工具栏自定义按钮时,它后面的宏将取消对工作表的保护并刷新外部数据,然后保护工作表(显然screenupdate设置为false)

wnavrhmk

wnavrhmk3#

我建议将外部查询添加到另一个不受保护的工作表上,但是您可以隐藏它。受保护工作表上的数据将简单地引用未受保护的工作表。

eqoofvh9

eqoofvh94#

我添加了数据连接到一些未受保护的工作表,然后隐藏工作表。不幸的是,即使工作簿的结构受到保护,连接也不起作用。
我不能相信我可能需要释放我的代码无保护,必须有一个工业实力的解决方案

相关问题