我有一个Excel 2010工作簿。一个工作表从外部数据连接(SQL查询)导入数据。我还在工作表中添加了其他列来执行数据计算并稍微按摩它。工作表构成了其他工作表中使用的原始数据的主干。
我想保护工作表以使其成为只读(允许排序,过滤,数据透视表使用)。我知道如何使用保护工作表功能执行此操作。但是当工作表受到保护时,我无法使用“刷新”按钮刷新源中的数据,我希望用户能够执行此操作。我打算将连接属性配置为在打开时自动刷新并允许手动刷新。
有没有人找到一种优雅的方法来启用保护工作表功能并启用外部数据刷新,而不允许用户自己更改单元格值?
答案 0 :(得分:2)
一种简单的方法是添加自定义按钮并编写宏。当用户按下工具栏自定义按钮时,其背后的宏将取消保护工作表并刷新外部数据,然后保护工作表(显然将screenupdate设置为false)
答案 1 :(得分:2)
根据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 宏,这样就可以手动刷新数据,而工作表应该被锁定。
我在连接属性中做的另一件事是删除后台刷新的勾号。
答案 2 :(得分:1)
我建议在另一张表上添加外部查询,不受保护,但是你会隐藏。 受保护工作表上的数据只是指未受保护的工作表。
答案 3 :(得分:0)
我将数据连接添加到一些未受保护的工作表,然后隐藏工作表。 不幸的是,即使工作簿的结构受到保护,这些连接也不起作用。
我无法相信我可能需要释放我的代码不受保护,必须有一个工业强度解决方案