当前位置: 代码迷 >> VB >> 怎么禁止某个对象再次被实例化
  详细解决方案

怎么禁止某个对象再次被实例化

热度:121   发布时间:2016-05-19 04:22:04.0
如何禁止某个对象再次被实例化
打开excel,新建一个工作簿,只保留一个sheet1表格,然后写入相应的vba代码......至此理所当然的认为这个工作簿以及sheet1是我自己创建的,应该为我“私有的”,别人是不能阅读、编辑的....

但实际上,我自己创建的工作簿和sheet1表格仍然是“公有的”,其它工具很容易获取他们的控制权。比如VB通过再次对sheet1表格的实例化就获取了对那个工作表的控制权,并且通过相应的操作很容易触发我自己写的vba代码.....譬如这样:

sheet1中的vba:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.StatusBar = Target.Address & ":" & Timer
End Sub



vb中的代码:


Option Explicit
Private mExcel As Excel.Application
Private mSht As Excel.Worksheet
Private Sub Command1_Click()
    Dim rng As Excel.Range
    Set rng = mSht.Range(Trim(Text1.Text))
    rng.Activate ''激活指定的单元格
End Sub
Private Sub Form_Load()
    Set mExcel = GetObject(, "excel.application")
    Set mSht = mExcel.Worksheets(1)
End Sub



好了,回到标题的问题:这个特定(我创建)的sheet1对象有没有可能避免再次被诸如vb之类的工具实例化?或者有没有一些特殊的处理办法?


------解决方案--------------------
我记得以前使用的时候,是可以查询到某个 excel 是否已经被打开的
如果该文件已经被打开,那么初始化 Application 会失败

再者,你动态创建的这个 sheet1 还没有保存,所以其它程序用常规方法是无法打开的
唯一能打开它的就只有你当前程序
------解决方案--------------------
将这个对象作为private类型,并且只能由属性访问得到。
------解决方案--------------------
Topc008 的程序和其他程序通过同一个公共接口访问 Excel,不存在区别。
好比你向物业提意见“这里少个垃圾桶”,然后物业放了个垃圾桶,由于这个垃圾桶是因为你的建议添加的,别人就不能用了?
------解决方案--------------------
这问题也许有变通的办法,但绝对有难度。尽量从功能设计上另想办法。
------解决方案--------------------
引用:
Quote: 引用:

Topc008 的程序和其他程序通过同一个公共接口访问 Excel,不存在区别。
好比你向物业提意见“这里少个垃圾桶”,然后物业放了个垃圾桶,由于这个垃圾桶是因为你的建议添加的,别人就不能用了?


我可以这样要求物业:增加一个带锁的垃圾桶,只能我用,或者是将这个新加的垃圾桶伪装成一个看上去并不像垃圾桶的东东.........


那就采用“加锁”的方法吧。
在代码中,加入一个初始化接口(认证过程),并定义一个相应的标识变量。
在使用其它的函数或过程前,先得调用一次这个认证接口。
认证通过,则设置标志变量为某个特殊值,或就用逻辑值标志。
而在其它的功能函数或过程入口处,就对这个变量进行判断,
“合法”就继续执行,否则就直接返回(退出过程/函数)。

这个认证过程,看你的需求,可以采用不同的方式:
如果限定在某台计算机上用,可以按计算机的特殊信息来认证;
如果限定只能“你”使用,则按登录用户ID来认证(很适合局域网账号);
如果限制为某些人能用,可以用密码、授权码(许可证文件或注册码)、域账号认证等。
  相关解决方案
本站暂不开放注册!
内测阶段只得通过邀请码进行注册!
 
  • 最近登录:Wed Jan 25 07:24:13 CST 2017
  • 最近登录:Wed Jan 25 07:24:13 CST 2017
  • 最近登录:Wed Jan 25 07:24:13 CST 2017
  • 最近登录:Wed Jan 25 07:24:13 CST 2017
  • 最近登录:Wed Jan 25 07:24:13 CST 2017