发现我大多数时候在CSDN提的技术问题都没有得到解决过,一切还是得靠自己,这个问题由复杂变简单,写下来可以让别人也可以参考一下.

Requirement:User通过Citrix连接到Server,运行Server上的程序会产生一些xls格式的表示,Leader希望禁掉所有xls文件的Open/Save As功能,就是不希望User删除Server上的文件.

我本来以为没有必要做这个事情,因为User本来就没有权限删除Server上的权限的,但是他可以Save As后再删除,但他是删除他自己的文件,原始文件他不能删除也没有关系撒,但严谨一点的话就是不希望User做查看Report以外的操作,要操作自己Copy到自己本地磁盘上去操作,呵呵...

于是开始找方法啊找方法:

第一种最简单但不算方法的方法就是改变xls文件的默认打开方式.

(还有一个问题值得注意的就是禁用了User使用Open/Save As功能但是其他应用程序可以正常Open/Read/write Excel文件.)

这种方法只能实现用户双击的时候不能正常打开xls,但是人家还是可以选择打开方式为Excel撒,然后就可以Sava As了,想到这个方法也是因为之前有误解以为根本就不让User打开文件,弃之,BS下自己.

第二种方法就是用Windows API,但是对这个一点都不熟悉,那就学吧,先把思路整理出来.

就是用VB写一个程序,当EXCEL一启动的时候就触发它,然后这个程序循环扫描桌面所有的Excel文件窗口,然后来禁用Open/Save As功能.实现了一半,发现获得Window句柄时并不能根据Window句柄获得Menu,再经研究发现,MS根本就实现不了,这个好像只能获得本应用程序的Menu,所以弃之,选择另外的方向.

第三种方法就是现在成功实现的方法,当第二种方法遇到问题的时候开始重点转移到Maro,如果能编辑一个宏实现禁用Open/Sava As 功能,然后这个宏可以应用到所有的xls文件,而且是xls一打开的时候就自动执行这个宏,那就完成了为需求的实现鸟,呵呵,事实证明,这个是最容易最简单的一种方法.

实现: 1.打开一个新的Workbook,打开vba编辑器(ALT + F11),双击ThisWorkbook,输入下面代码.

Private Sub Workbook_Open()
                   Application.CommandBars("File").Controls("Save As...").Enabled = False
                   Application.CommandBars("File").Controls("Open...").Enabled = False
               End Sub

注意:如果你的操作系统是中文的话就应该是:

Application.CommandBars("File").Controls("另存为...").Enabled = False
                   Application.CommandBars("File").Controls("打开...").Enabled = False

跟你EXCEL里面菜单项目的名字一样就可以了.

2.将Workbook保存名为PERSONAL.XLS,然后放在C:/Program Files/Microsoft Office/OFFICE11/XLSTART目录下,

这个路径是相对路径,你可以搜索XLSTART目录在你的电脑上,然后将此文件放在这个目录下.

这样的话每次你打一个xls文件PERSONAL.XLS文件都会打开而且自动执行宏,所以你的文件的Open/Save As也就变灰了,不能用咯.

补充:可以将PERSONAL.XLS文件设置为hide,这样可以防止用户不小心把PERSONAL.XLS文件也改变并且存盘了.

参考资料:

http://faq.csdn.net/read/213792.html
http://office.microsoft.com/zh-cn/help/HA010346282052.aspx

2010-03-01

More requirement:

禁用一个三级菜单项,例:

Application.CommandBars("Data").Controls("Get External Data").Controls("New Database Query...").Enabled = False

还遇到个问题就是把这个文件放进XLSART后,目地是达到了,但是如果删除了这个文件的话,相应的功能并不会消失,菜单项还是会被禁用,所以就只能所所有禁用的功能改为True

如:Application.CommandBars("Data").Controls("Get External Data").Controls("New Database Query...").Enabled = True

这样再打开其他Excel文件就没有影响了,而且不用的话最好是把XLSTART下面的文件删掉,免得每次打开一个文件这个文件还是自动为启动,占资源.

还增了个需求就是在菜单栏加一个自定义菜单,然后实现当User点此菜单就自动将本文件另存到他本地C:/Temp/下.

'添加一个菜单项

'SaveToC' 是宏名,点BEA就自动运行SaveToC

Sub CreateMyMenu()
     Set MyMenu = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup)
     With MyMenu
          .BeginGroup = True
          .Caption = "BEA"
          .OnAction = "SaveToC"
     End With
End Sub

'删除菜单项
Sub DeleleMyMenu()
 On Error Resume Next
    Application.CommandBars("Worksheet Menu Bar").Controls("BEA").Delete
End Sub

'打开文件的时候如果此菜单存在就删除,然后调用添加菜单项

Private Sub Workbook_Open()  
  Call DeleleMyMenu
  Call CreateMyMenu 
End Sub

'在关闭文件的时候调用删除单菜荐
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Call DeleleMyMenu 
End Sub

'宏 SaveToC

Sub SaveToC()
'
' SaveToC Macro
' Macro recorded 2/26/2010 by Jessie
'
'
    Dim strFileName As String
    Dim strPath As String
    Dim iResponse As Integer
    Dim blnIsExistFolder As Boolean
    Dim blnIsExistFile As Boolean
   
    strPath = "C:/temp/"
       
    If FileFolderExists(strPath) Then
        blnIsExistFolder = True
    Else
       blnIsExistFolder = False
    End If
   
    If blnIsExistFolder = False Then
       MkDir (strPath)
    End If
   
    strFileName = strPath & ThisWorkbook.Name
   
    If FileFolderExists(strFileName) Then
       blnIsExistFile = True
    Else
       blnIsExistFile = False
    End If
   
    If blnIsExistFile = True Then
       iResponse = MsgBox("The file '" & ThisWorkbook.Name & "' already exists. Do you want to replace the existing file?' ", vbYesNoCancel + vbExclamation)
    Else
       Application.ActiveSheet.SaveAs Filename:=strFileName
    End If
    If iResponse = 6 Then
       Application.DisplayAlerts = False
       Application.ActiveSheet.SaveAs Filename:=strFileName
       Application.DisplayAlerts = True
    End If
   
End Sub
Public Function FileFolderExists(strFullPath As String) As Boolean
    On Error GoTo EarlyExit
    If Not Dir(strFullPath, vbDirectory) = vbNullString Then FileFolderExists = True
   
EarlyExit:
    On Error GoTo 0
End Function

禁用EXCEL的Open/Save As功能相关推荐

  1. 使用jQuery OCUpload实现excel文件一键上传功能

    使用jQuery OCUpload实现excel文件一键上传功能 js代码 //为导入按钮,添加一键上传效果 $("#button-import").upload({action: ...

  2. 【vue+springboot】excel模板下载、导入功能实现

    基于VUE+SpringBoot实现excel模板下载.导入功能 背景 最近在工作中经常遇到批量导入的功能,而且前端还要提示导入成功几条.失败几条.哪一条数据重复.是哪一条导入的数据出现问题等,抽空写 ...

  3. python自动翻译excel某一列_python批量将excel内容进行翻译写入功能

    由于小编初来乍到,有很多地方不是很到位,还请见谅,但是很实用的哦! 1.首先是需要进行文件的读写操作,需要获取文件路径,方式使用os.listdir(路径)进行批量查找文件. file_path = ...

  4. 启用和禁用excel 中的加载项

    原文地址为: 启用和禁用excel 中的加载项 查看已安装的加载项 安装 2007 Microsoft Office System 时,将在计算机上安装多个加载项. 请在以下 2007 Microso ...

  5. DataScience:初学者进阶数学处理专家,学会Excel中50个常用功能带你飞

    DataScience:初学者进阶数学处理专家,学会Excel中50个常用功能带你飞 目录 初学者进阶数学处理专家,学会Excel中50个常用功能带你飞 1.自动筛选 2.在Excel中字符替换 3. ...

  6. SpringCloud(第 016 篇)电影微服务,定制Feign,一个Feign功能禁用Hystrix,另一个Feign功能启用Hystrix...

    2019独角兽企业重金招聘Python工程师标准>>> SpringCloud(第 016 篇)电影微服务,定制Feign,一个Feign功能禁用Hystrix,另一个Feign功能 ...

  7. java获取excle表格对象_Java使用excel工具类导出对象功能示例

    本文实例讲述了Java使用excel工具类导出对象功能.分享给大家供大家参考,具体如下: package com.gcloud.common; import org.apache.poi.ss.use ...

  8. 办公技巧:Excel教程36个逆天功能,全面了解一下!

    今天给大家收集整理了Excel教程36个逆天功能,全面了解一下!内含操作步骤哦. 1.添加文字下面线条的2种方法 2.设置列宽的3种方法 3.以cm为单位设置行高跟列宽 4.输入0开头数字的2种方法 ...

  9. c++ qt 操作Excel 实现冻结窗格的功能。

    使用qt操作Excel的一些基本操作内容我就不介绍了,你们搜一下就可以了,如果不想麻烦可以去下面这个链接地址看一下. qt操作Excel基础使用技巧 本文主要讲一个知识点,就是使用qt操作Excel实 ...

最新文章

  1. SwiftStack迎来v5.0,向混合IT规则张开怀抱
  2. 如何查看阵列卡的队列深度
  3. python入门需要多久-目前Python学习需要多长时间?老男孩Python入门培训
  4. java线程组 线程池_JAVA多线程(三)-----线程组、线程池和线程相关类
  5. JavaScript对象——原型与原型链
  6. submit()提交表单时,显示警示框
  7. 1小时搞懂设计模式之策略模式
  8. 东部分布式光伏迎来发展高潮
  9. 【自我感悟致学弟学妹】大三上的感悟,何为真正优秀的人
  10. python英文文本词性分析
  11. 华为电脑怎么把虚拟化打开_电脑怎么在bios开启虚拟化?
  12. 计算机普通话测试评分标准,计算机辅助普通话测试评分细则
  13. 【2022软件创新实验室暑假集训】Java环境安装与基础介绍
  14. 百度云有关Token
  15. java开发网易电话面试 一面总结
  16. 如何写出优美的代码-写的爽读的爽
  17. python实现UDP
  18. Selenium重复使用远程打开的Remote Chrome浏览器
  19. msysgit简单使用教程
  20. 《嵌入式 – GD32开发实战指南》第2章 初识GPIO流水灯

热门文章

  1. JDK的安装与配置(配图)
  2. 终极解码在虚拟机中无法加载字幕的问题
  3. CC/V-CHIP,Teletext等VBI处理答疑时间
  4. 排除珊瑚虫QQ不显对方IP的故障(转)
  5. Python基础教程-菜鸟教程学习笔记1
  6. 2022年[最新]泰晤士高等教育世界大学声誉排名(完整版)
  7. 大写阿拉伯数字(大写阿拉伯数字0到10)
  8. 【图解】联想IdeaPad V450拆机教程,光驱位安装固态硬盘图解
  9. Oracle10g在win10安装 ‘检查操作系统版’不通过
  10. C# 查询波峰、波谷