[求助]请问守柔如何实现VBA宏代码只能在指定电脑上使用?
时间:2007-09-20
来源:互联网
请问守柔如何实现VBA宏代码只能在指定电脑上(自己的电脑)使用?
单位电脑很多,我不想人人都拷贝我自己开发的VBA宏代码使用,因为我是做成模板文件放在starup文件夹下使用。
怎么样在现有的宏代码中加入一段代码使得只能在自己的电脑上使用?我的想法是查找当前计算机名称,如果不符合就跳出宏代码运行。还有其他好的解决方案吗?
请守柔大师帮帮小弟!谢谢!
[此贴子已经被作者于2007-9-20 17:28:07编辑过]
作者: zhaoyes 发布时间: 2007-09-20
根据硬盘序列号可能也行。
如下代码:
Private Declare Function HD_ID Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Private Sub Get_HD_ID()
Dim tempLg As Long
Dim VolName As String
Dim my_HD_ID As Long
Dim Maxlen As Long
Dim Sysflag As Long
Dim fsysName As String
tempLg = HD_ID("c:\", VolName, 256, my_HD_ID, Maxlen, Sysflag, fsysName, 256)
If Hex(my_HD_ID) = "B8E4675A" Then
'本机
MsgBox "本机,运行!"
Else
Exit Sub
End If
End Sub
作者: konggs 发布时间: 2007-09-20
作者: zhaoyes 发布时间: 2007-09-21
作者: zhaoyes 发布时间: 2007-09-22
版主提供一个最佳解决方案好吗?一定要在WORD环境下的
Function GetComputerName()
GetComputerName = Environ("ComputerName")
End Function
Sub Test()
If UCase(GetComputerName) <> UCase("shourou") Then Exit Sub
End Sub
注意,计算机名为右击[我的电脑]的[属性]对话框中的[计算机名]选项卡中的值。
作者: 守柔 发布时间: 2007-09-22
[此贴子已经被作者于2007-9-22 10:52:41编辑过]
作者: zhaoyes 发布时间: 2007-09-22
把它置于过程的开始位置(DIM声明行后)即可。
If UCase(GetComputerName) <> UCase("shourou") Then Exit Sub
每一个SUB 过程都加上这句即可。
作者: 守柔 发布时间: 2007-09-22
首先祝守柔大师中秋快乐!
Function GetComputerName()
GetComputerName = Environ("ComputerName")
End Function
Sub Test()
If UCase(GetComputerName) <> UCase("shourou") Then Exit Sub
End Sub
守柔提供的以上代码非常好用;现在我想在现有的宏代码中加入一段代码,如果不是自己的电脑打开WORD宏有工程保护密码模板文件时(密码是已知的),就删除自身所有的宏代码并保存,需要不弹出确认保存窗口就把所有代码删除!
请教守柔大师如何实现?
[此贴子已经被作者于2007-9-25 15:37:10编辑过]
作者: zhaoyes 发布时间: 2007-09-25
作者: tangqingfu 发布时间: 2008-11-02
作者: readyzhu 发布时间: 2008-11-09
引用:
原帖由 konggs 于 2007-9-20 20:58 发表根据硬盘序列号可能也行。如下代码:Private Declare Function HD_ID Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize ...
代码置于Word对象中还是模块中?
tempLg = HD_ID("c:\", VolName, 256, my_HD_ID, Maxlen, Sysflag, fsysName, 256)
这句代码是固定的吗?还是要根据硬盘的不同而变化?
作者: tangqingfu 发布时间: 2009-06-05
引用:
原帖由 tangqingfu 于 2009-6-5 10:43 发表请教:
代码置于Word对象中还是模块中?
tempLg = HD_ID("c:\", VolName, 256, my_HD_ID, Maxlen, Sysflag, fsysName, 256)
这句代码是固定的吗?还是要根据硬盘的不同而变化?
作者: 守柔 发布时间: 2009-06-05
两个地方我都试了一下,发现没有效果,能否请守版做个文档给我测试一下,并告知代码放置何处.
作者: tangqingfu 发布时间: 2009-06-05
作者: chuhaiou 发布时间: 2009-06-06
引用:
原帖由 守柔 于 2007-9-22 10:13 发表QUOTE:以下是引用zhaoyes在2007-9-22 9:42:02的发言:版主提供一个最佳解决方案好吗?一定要在WORD环境下的Function GetComputerName()GetComputerName = Environ("ComputerName")End FunctionSub Test() ...
PS:我的计算机名为:IMAGE-MYCOMPUTER
请各位帮忙一下!
作者: tangqingfu 发布时间: 2009-12-09

作者: sharkzhou 发布时间: 2009-12-12
作者: imljs 发布时间: 2009-12-16
作者: imljs 发布时间: 2009-12-16
引用:
原帖由 imljs 于 2009-12-16 09:48 发表放在模块中,前三句是一个自定义函数,要单独存放,把第五句放在任意一个过程里,作为判断,要给出真假时所做的动作才有反映,只把代码复制粘贴是没用的。
能否请ijimljs兄上传个含代码的文档事例?
作者: tangqingfu 发布时间: 2009-12-16

作者: imljs 发布时间: 2009-12-16
我采用守版的作法:
If UCase(GetComputerName) <> UCase("IMAGE-MYCOMPUTE") Then Exit Sub
请教如何在代码中添加这样的情况:
如果电脑的用户为指定用户,则运行代码,打开文档,如果电脑的用户不是指定用户,则弹出信息框(代码如下),退出文档:
MsgBox "本台计算机的名字是:" & UCase(GetComputerName) & ",为非法用户!请在指定计算机上打开文档!"
作者: tangqingfu 发布时间: 2009-12-16
作者: imljs 发布时间: 2009-12-16
作者: imljs 发布时间: 2009-12-16
作者: 我爱myvba 发布时间: 2009-12-16
作者: 我爱myvba 发布时间: 2009-12-16
作者: 迅岐同心 发布时间: 2010-03-20
作者: ww0000 发布时间: 2011-08-08
作者: lovelrh 发布时间: 2011-08-08
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28