ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1715|回复: 3

Excel2010的安全设置比起Excel2007有什么区别?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-8-19 15:30 | 显示全部楼层 |阅读模式
本帖最后由 Tianorder 于 2015-8-20 15:47 编辑

在装有Excel2007的电脑中,我用VBS可以通过VBA来调用鼠标,
但Excel2010就不行了。
以下是截图和代码,在装有Excel2007或Excel2003的机器上保存为.vbs即可以运行。
  1. Option Explicit

  2. Dim WshShell
  3. Dim oExcel, oBook, oModule
  4. Dim strRegKey, strCode, x, y
  5. Set oExcel = CreateObject("Excel.Application") '创建 Excel 对象

  6. set WshShell = CreateObject("wscript.Shell")

  7. strRegKey = "HKEY_CURRENT_USER\Software\Microsoft\Office\$\Excel\Security\AccessVBOM"
  8. strRegKey = Replace(strRegKey, "[        DISCUZ_CODE_0        ]quot;, oExcel.Version)

  9. WshShell.RegWrite strRegKey, 1, "REG_DWORD"

  10. Set oBook = oExcel.Workbooks.Add '添加工作簿
  11. Set oModule = obook.VBProject.VBComponents.Add(1) '添加模块
  12. strCode = _
  13. "'Author: Demon" & vbCrLf & _
  14. "'Website: " & vbCrLf & _
  15. "'Date: 2011/5/10" & vbCrLf & _
  16. "Private Type POINTAPI : X As Long : Y As Long : End Type" & vbCrLf & _
  17. "Private Declare Function SetCursorPos Lib ""user32"" (ByVal x As Long, ByVal y As Long) As Long" & vbCrLf & _
  18. "Private Declare Function GetCursorPos Lib ""user32"" (lpPoint As POINTAPI) As Long" & vbCrLf & _
  19. "Private Declare Sub mouse_event Lib ""user32"" Alias ""mouse_event"" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)" & vbCrLf & _
  20. "Public Function GetXCursorPos() As Long" & vbCrLf & _
  21. "Dim pt As POINTAPI : GetCursorPos pt : GetXCursorPos = pt.X" & vbCrLf & _
  22. "End Function" & vbCrLf & _
  23. "Public Function GetYCursorPos() As Long" & vbCrLf & _
  24. "Dim pt As POINTAPI: GetCursorPos pt : GetYCursorPos = pt.Y" & vbCrLf & _
  25. "End Function"
  26. oModule.CodeModule.AddFromString strCode '在模块中添加 VBA 代码

  27. oExcel.Run "SetCursorPos", 30, 30 '设置鼠标 X Y 坐标
  28. Const MOUSEEVENTF_MOVE = &H1
  29. Const MOUSEEVENTF_LEFTDOWN = &H2
  30. Const MOUSEEVENTF_LEFTUP = &H4
  31. Const MOUSEEVENTF_RIGHTDOWN = &H8
  32. Const MOUSEEVENTF_RIGHTUP = &H10
  33. Const MOUSEEVENTF_MIDDLEDOWN = &H20
  34. Const MOUSEEVENTF_MIDDLEUP = &H40
  35. Const MOUSEEVENTF_ABSOLUTE = &H8000
  36. '模拟鼠标左键单击
  37. oExcel.Run "mouse_event", MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
  38. '模拟鼠标右键单击
  39. oExcel.Run "mouse_event", MOUSEEVENTF_RIGHTDOWN + MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
  40. oExcel.Run "SetCursorPos", 140, 340 '设置鼠标 X Y 坐标
  41. '关闭 Excel
  42. oExcel.DisplayAlerts = False
  43. oBook.Close
  44. oExcel.Quit
复制代码
然则,即使我在宏设置中启用所有宏;在自定义功能区在开发工具前打对号,
在Excel2010或Excel2013中依然会出现这样的错误:

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-20 16:39 | 显示全部楼层
我想,并不是Excel的问题,因为Set oBook = oExcel.Workbooks.Open("C:\Users\Administrator\Desktop\Book1.xls")这样的代码均为报错。
报错的是找不到在VBA中写的Function。

也许是VBA的语法变了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-21 16:40 | 显示全部楼层
Tianorder 发表于 2015-8-20 16:39
我想,并不是Excel的问题,因为Set oBook = oExcel.Workbooks.Open("C:%users\Administrator\Desktop\Book1 ...

我测试了一下,以下代码在Excel2010中并未报错。
这说明,错的是SetCursorPos等函数的定义
  1. Option Explicit

  2. Dim WshShell
  3. Dim oExcel, oBook, oModule
  4. Dim strRegKey, strCode, x, y
  5. Set oExcel = CreateObject("Excel.Application") '创建 Excel 对象

  6. set WshShell = CreateObject("wscript.Shell")

  7. strRegKey = "HKEY_CURRENT_USER\Software\Microsoft\Office\$\Excel\Security\AccessVBOM"
  8. strRegKey = Replace(strRegKey, "$", oExcel.Version)

  9. WshShell.RegWrite strRegKey, 1, "REG_DWORD"

  10. Set oBook = oExcel.Workbooks.Add '添加工作簿
  11. Set oModule = obook.VBProject.VBComponents.Add(1) '添加模块
  12. strCode = _
  13. "Sub Tian()" & vbCrLf & _
  14. "MsgBox ""tian"",64,""D""" & vbCrLf & _
  15. "End Sub"
  16. oModule.CodeModule.AddFromString strCode '在模块中添加 VBA 代码
  17. oExcel.Run "tian"
  18. '关闭 Excel
  19. oExcel.DisplayAlerts = False
  20. oBook.Close
  21. oExcel.Quit
复制代码

TA的精华主题

TA的得分主题

发表于 2017-6-14 23:15 | 显示全部楼层
2010中需要添加PtrSafe
这个麻烦网上有解决办法。
问题是,我发现不能模拟鼠标点击!
求助大神!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-26 12:47 , Processed in 0.043569 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表