之前还要做点准备就能达到你的目的了,即先选择要保护区域或整个工作表,再在单元格格式设置中,选择“保护”选项卡,把“锁定”的对勾去掉。确定后,再按你说的方法进行保护,就能进行排序操作的了。
保护工作表时,把“设置未锁定单元格”的对勾去掉试试看。
VBA实现排序:
并非全部代码,请自行举一反三;
代码如下:
Private Sub Workbook_Open() '本代码放在工作簿文件的打开事件中,只要工作簿被打开,这里的代码就会自动被执行
Dim tmpR As Range '声明了一个RANGE对象类型的变量,用来保存动态选中的范围
Set tmpR = Sheet1.Range("a2", "b" & CStr(Sheet1.Range("b65536").End(xlUp).Row)) '为对象类型的变量赋值需要使用SET关键字;同时将A2到B列最后一非空单元格所在区域赋值给tmpR变量
tmpR.Select '选中上述区域
tmpR.Sort Sheet1.Columns("b"), xlDescending '将上述区域按照B列数据降序排序
End Sub
还需要再有一个触发器,以实现点一次降序,第二次升序的功能。
最后别忘了给你的vba加一个密码。
嘿嘿,你的要求如果用access来实现就简单多了……
设置保护你是会的,那么就在保护工作表对话框中选中“排序”即可。用图片说明吧
excel本身认为排序和筛选本身就是对单元格的一种编辑,你的要求是自相矛盾的,所以不用VBA是不能实现的,要达到你的目的,你只有将你的文件属性设为只读属性,这样阅读的人就算编辑了,也不能保存当前文件,只能另存为副本。
把工作表本身设置成只读的,虽然暂时可以改,但是修改不能保存,只能另存为。应该可以满足你的要求