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

保护Excel工作表为只读,但启用外部数据刷新,excel,excel-2010,protection,worksheet,Excel,Excel 2010,Protection,Worksheet,我有一本Excel 2010工作簿。一个工作表从外部数据连接(SQL查询)导入数据。我还向工作表中添加了额外的列,以对数据执行计算并对其进行一些处理。工作表构成了其他工作表中使用的原始数据的主干 我想保护工作表,使其成为只读的(允许使用排序、筛选、透视表)。我知道如何使用“保护工作表”功能执行此操作。但是当工作表受到保护时,我不能使用“刷新”按钮刷新源数据,我希望用户能够这样做。我打算将连接属性配置为打开时自动刷新,并允许手动刷新 是否有人找到了一种优雅的方法来启用“保护工作表”功能并启用外部数

我有一本Excel 2010工作簿。一个工作表从外部数据连接(SQL查询)导入数据。我还向工作表中添加了额外的列,以对数据执行计算并对其进行一些处理。工作表构成了其他工作表中使用的原始数据的主干

我想保护工作表,使其成为只读的(允许使用排序、筛选、透视表)。我知道如何使用“保护工作表”功能执行此操作。但是当工作表受到保护时,我不能使用“刷新”按钮刷新源数据,我希望用户能够这样做。我打算将连接属性配置为打开时自动刷新,并允许手动刷新


是否有人找到了一种优雅的方法来启用“保护工作表”功能并启用外部数据刷新,而不允许用户自己更改单元格值?

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

根据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项目中打开了此工作簿,并编辑了工作簿打开例程

Private Sub Workbook_Open()
RefreshData
End Sub
有关保护选项的更多信息,请参见:

它起作用了;每次打开工作簿并刷新数据时,工作表都会被锁定。UserInterfaceOnly属性对刷新数据的命令没有影响(尽管它应该对其他宏事件有影响)。您仍然需要专门解锁电子表格,执行数据刷新,然后再次锁定工作表

我在另一张工作表上添加了一个表单按钮,并将其链接到我的RefreshData宏,以便在工作表被锁定时手动刷新数据


我在连接属性中做的另一件事是在后台刷新时删除勾号。

我建议在另一个工作表中添加外部查询,不受保护,但您可以隐藏。
受保护的工作表上的数据只是指未受保护的工作表。

我将数据连接添加到一些未受保护的工作表,然后隐藏这些工作表。 不幸的是,即使工作簿的结构受到保护,连接也无法工作

我不敢相信我可能需要释放我的代码不受保护,必须有一个工业实力的解决方案