Office中国论坛/Access中国论坛

标题: excel 自杀代码的执行(2007、2010、2013) [打印本页]

作者: lanshijitian    时间: 2015-4-7 17:40
标题: excel 自杀代码的执行(2007、2010、2013)
excel中加入Vba代码后可正常执行,但前提是Excel的宏为打开状态,而很多人默认宏为禁止,那么Vba代码则失效。如何让用户打开提示打开宏,否则文件内容则为空白无法看到内容。(目的是保护文件的知识产权和文件正常使用)。部分方法尝试仅限2003版,现求个针对2010一下版本都能用的方法。最好对WPS等其他软件依然有效。谢谢!
作者: tmtony    时间: 2015-4-7 22:30
可用exe 修改注册表
作者: 轻风    时间: 2015-4-8 08:26
我想知道你2003版的部分方法是什么?
作者: lanshijitian    时间: 2015-4-8 09:25
tmtony 发表于 2015-4-7 22:30
可用exe 修改注册表

貌似从2007版处于安全考虑就不能直接强制启用VBA了(其他方法还不知道),若采用.exe修改注册表估计会被杀毒软件等安全工具拦截。参考网上采用DLL封装,过程过于复杂不太懂。(还有发现过采用office以外的工具如:WPS等,估计也会让宏失效)。若能让office自带的功能就能完成强制开启宏(禁止宏则只能看到空白内容)就好了!谢谢!
作者: roych    时间: 2015-4-8 12:26
本帖最后由 roych 于 2015-4-8 12:32 编辑
轻风 发表于 2015-4-8 08:26
我想知道你2003版的部分方法是什么?

宏表。按下Ctrl+F11,即可创建一个宏的工作表,然后输入以下内容:
禁用宏  auto_open
  =ERROR(FALSE)
  =SET.VALUE($A$35,(GET.DOCUMENT(2)&"\"&GET.WORKBOOK(16)))
  =WORKBOOK.HIDE("aaa")
  =WORKBOOK.UNHIDE("sheet1")
  =WORKBOOK.UNHIDE("sheet2")
  =ACTIVATE("sheet3")
  =SET.VALUE(A37,GET.WORKBOOK(38))
  =RUN("No")
  =RETURN()
  
  AUTO_CLOSE
  =ERROR(FALSE)
  =SET.VALUE(A37,"")
  =WORKBOOK.HIDE("aaa")
  =WORKBOOK.HIDE("sheet1")
  =WORKBOOK.HIDE("sheet2")
=ERROR(FALSE) No =SAVE()
=IF(A35=A36) =ON.KEY("%{f11}","") =RETURN()
=FILE.DELETE($A$35) =ON.KEY("%{f8}","")
=QUIT() =ON.KEY("{esc}","") =ERROR(FALSE)
=RETURN() =ON.KEY("^{BREAK}","") =ALERT("抱歉,你没有权限编辑此宏表,文件将自毁。",3)
=ELSE() =ON.KEY("^{SCROLLLOCK}") =RUN(A18)
=FILE.DELETE(A35) =ON.KEY("%^{q}", "jiashu") =RETURN()
=FILE.DELETE(A36) =RETURN() =ERROR(FALSE)
=QUIT()  =IF(A37="sheet3")
=RETURN()  WORKBOOK.HIDE("aaa")
=END.IF()  =RETURN()
  =ELSE()
=ERROR(FALSE)  =SET.VALUE($A$36,(GET.DOCUMENT(2)&"\"&GET.WORKBOOK(16)))
=FILE.DELETE(A35)  =HIDE()
=QUIT()  =IF(ALERT(B36, 1),QUIT(),RUN(A18))
=RETURN()  =RETURN()
  =END.IF()
C:\Documents and Settings\888\桌面\Book1.xls  =END.IF()
"禁用宏就意味着放弃使用本文件,预继续使用請按“確定”重新运行
并启用宏,不使用請按“取消”,本文件将自毁。抱歉!祝你好运!"
Sheet3 ALERT("你用shift组合键禁用了宏,禁用宏就意味着放弃对本文件的使用,抱歉!祝你好运!",2)
然后定义名称:auto_open,引用A1……算了,说不清楚,上传一个附件吧[attach]56093[/attach]不过这都是防君子不防小人的做法,建议不必花时间在这上面。Excel的安全性向来比较弱。

作者: roych    时间: 2015-4-8 13:13
本帖最后由 roych 于 2015-4-8 13:15 编辑
lanshijitian 发表于 2015-4-8 09:25
貌似从2007版处于安全考虑就不能直接强制启用VBA了(其他方法还不知道),若采用.exe修改注册表估计会被 ...

可以考虑用vbs来启用宏,Access的例子如下(Excel应该也是类似的):
http://www.office-cn.net/thread-52598-1-1.html
思路是:
用一个是vbs文件作为打开你这个excel 的钥匙,你运行一个vbs文件自动强制启用宏打开excel文件了,优点还有就是,可以为excel设置密码,单单打开excel必须输入密码,你要是用钥匙的话,就不需要,起安全保护作用。
步骤:
1.将下面这段代码复制到记事本中。
  1. Dim oExcel,fn
  2. fn=Replace(WScript.ScriptFullName,"我的工作簿.vbs","我的工作簿.xls")'截取的路径
  3. Set oExcel = CreateObject("Excel.Application")
  4. oExcel.Visible=True
  5. Set fso = oExcel.Workbooks.Open(fn ,,,,"excel密码")
  6. Set oExcel = Nothing
  7. Wscript.Quit
复制代码
2.将【我的工作簿.vbs】改成你要生成的vbs的文件名。【我的工作簿.xls】改成你的excel文件名字。【excel密码】改成你的excel'密码,例如123,如果不设密码,直接双引号即可。
3.将记事本保存为vbs文件(直接将TXT改成VBS),一定是vbs图标和txt不一样的。
4.将这个vbs文件和excel文件放在一起,你双击vbs,马上就打开excel了,在将excel'宏安全性设为高级看看,一样有效。
补充:
1.网上可以找一个vbs2exe工具,将vbs生成exe并设置自己独有的图标,然后发送到桌面快捷方式。以后在桌面上双击就可以打开excel了。
2.为了保护数据的安全,可以将加密的excel分发出去,然后给配上这个excel钥匙,没有钥匙的打不开excel有钥匙的才能打开。
3.若部分杀毒软件会报毒,可先在杀毒软件里面设置白名单。


作者: lanshijitian    时间: 2015-4-17 16:29
我根据网上参考。通过VBA自杀代码
Private Sub Workbook_Open()
If Date <= #1/1/2015# Then Exit Sub
     MsgBox "文件已过期。"
     With ThisWorkbook
         Worksheets("sheet1").Range("a1:z100").ClearContents
         .Saved = True
         .ChangeFileAccess xlReadOnly
         Kill .FullName
         .Close False
  End With
End Sub
(当文件宏默认开启时起作用)。
通过:禁止另存为进行限制

Private Sub workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim response As Long
    If SaveAsUI = True Then
    response = MsgBox("该工作簿不允许用“另存为”来保存," & "你要用原工作簿名称来保存吗? ", vbQuestion + vbOKCancel)
    Cancel = (response = vbCancel)
    If Cancel = False Then Me.Save
    Cancel = True
    End If
    End Sub
在将编制好的Excel某个单元格写入NOW函数,与设置好的日期进行比对,若不超期则正常,若超期生成扰乱数据,用以扰乱之前编制好的数据。同时将文件内容限制权限和给VBA加密。这样宏启用文件按要求自毁,宏不启用,文件内容混乱无法使用。目前是不用其他软件的方法。感谢版主和坛友的细心指导,学习研究了!
作者: oiue    时间: 2015-5-14 19:02
非常感谢,我很需要
作者: rembo    时间: 2015-12-26 09:46
谢谢楼主分享~




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3