+ -
当前位置:首页 → 问答吧 → [求助]请问守柔如何实现VBA宏代码只能在指定电脑上使用?

[求助]请问守柔如何实现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

我忘记说我的代码是运行在WORD环境下的,请版主解决一下,最好用判断CPUID或者计算机名来处理,因为每个人都有可能很快换硬盘,CPU和计算机名却不会

作者: zhaoyes   发布时间: 2007-09-21

版主提供一个最佳解决方案好吗?一定要在WORD环境下的

作者: zhaoyes   发布时间: 2007-09-22

QUOTE:
以下是引用zhaoyes在2007-9-22 9:42:02的发言:
版主提供一个最佳解决方案好吗?一定要在WORD环境下的

Function GetComputerName()
GetComputerName = Environ("ComputerName")
End Function
Sub Test()
    If UCase(GetComputerName) <> UCase("shourou") Then Exit Sub
End Sub
注意,计算机名为右击[我的电脑]的[属性]对话框中的[计算机名]选项卡中的值。

作者: 守柔   发布时间: 2007-09-22

我的WORD宏代码有很多模块,每个模块都代表一个单独的计算控件功能,那么每一个模块都需要加入这段代码吗?还是加入到哪里?

[此贴子已经被作者于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

请教版主,我将代码放在EXCEL时总是出现HD_ID函数未定义,是什么原因呢?要放在宏代码中的哪个位置,是用硬盘的物理序列号还是逻辑序列号?

作者: 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)
这句代码是固定的吗?还是要根据硬盘的不同而变化?
磁盘怎么变化没有关系,总是有C盘的,不论C盘是否安装了操作系统。

作者: 守柔   发布时间: 2009-06-05

代码置于Word对象中还是模块中?
两个地方我都试了一下,发现没有效果,能否请守版做个文档给我测试一下,并告知代码放置何处.

作者: tangqingfu   发布时间: 2009-06-05

代码置于Word对象中还是模块中?

作者: 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()   ...
我按照这样操作,把计算机名换成IMAGE-MYCOMPUTER,怎么还是不行呢?
PS:我的计算机名为:IMAGE-MYCOMPUTER
请各位帮忙一下!

作者: tangqingfu   发布时间: 2009-12-09

有點看不太懂,但繼續學習

作者: sharkzhou   发布时间: 2009-12-12

放在模块中,前三句是一个自定义函数,要单独存放,把第五句放在任意一个过程里,作为判断,要给出真假时所做的动作才有反映,只把代码复制粘贴是没用的。

作者: imljs   发布时间: 2009-12-16

我想知道的是,2楼konggs版主的代码是物理硬盘号还是逻辑硬盘号,谢谢。

作者: imljs   发布时间: 2009-12-16

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

作者: tangqingfu   发布时间: 2009-12-16

2009-12-16_144546.jpg (58.37 KB)
2009-12-16 14:47

VBA宏代码只在指定电脑上使用.rar (6.21 KB)
VBA宏代码只在指定电脑上使用.rar (6.21 KB)
下载次数: 47
2009-12-16 14:47

作者: imljs   发布时间: 2009-12-16

谢谢imjls兄!
我采用守版的作法:
If UCase(GetComputerName) <> UCase("IMAGE-MYCOMPUTE") Then Exit Sub
请教如何在代码中添加这样的情况:
如果电脑的用户为指定用户,则运行代码,打开文档,如果电脑的用户不是指定用户,则弹出信息框(代码如下),退出文档:
MsgBox "本台计算机的名字是:" & UCase(GetComputerName) & ",为非法用户!请在指定计算机上打开文档!"

作者: tangqingfu   发布时间: 2009-12-16

我在excel中学过此类代码,但现在也都忘了,打开文档就运行代码,则代码应该放在一个特定的位置,好像过程的名字也是固定的。退出文档我知道,应该是ThisDocument.Close

作者: imljs   发布时间: 2009-12-16

谁能告诉我,2楼版主的代码是物理号还是逻辑号,怎么和我用别的程序测到的序列号不一样啊,如果是逻辑号,那么格式化硬盘后,逻辑号是否也要改变?

作者: imljs   发布时间: 2009-12-16

我也想知道。

作者: 我爱myvba   发布时间: 2009-12-16

我也测试了一下,所得的序列号与其它程序得到的序列号也是不一样,2楼版主的代码如果是硬盘逻辑序列号的话,格式化以后是否会改变?

作者: 我爱myvba   发布时间: 2009-12-16

这一招实在高,分享了!

作者: 迅岐同心   发布时间: 2010-03-20

我试了好象没作用

作者: ww0000   发布时间: 2011-08-08

真的很好,谢谢,学习了

作者: lovelrh   发布时间: 2011-08-08