我想限制Excel工作表仅在我的组织网络中打开。如果我的系统与公司的互联网连接,那么它应该是开放的。如果系统未连接到互联网或与外部网络连接,则不应打开。
我正在使用Macro。我到目前为止使用了下面的代码,在Stack Overflow上的另一个答案中找到了这个。此代码为不同连接网络中的系统提供相同的值。这仅在系统不同时才有效。但不适用于不同的网络。
Option Explicit
Enum COMPUTER_NAME_FORMAT
ComputerNameNetBIOS
ComputerNameDnsHostname
ComputerNameDnsDomain
ComputerNameDnsFullyQualified
ComputerNamePhysicalNetBIOS
ComputerNamePhysicalDnsHostname
ComputerNamePhysicalDnsDomain
ComputerNamePhysicalDnsFullyQualified
End Enum
Declare Function GetComputerNameEx Lib "kernel32" Alias "GetComputerNameExA"
( _
ByVal NameType As COMPUTER_NAME_FORMAT, _
ByVal lpBuffer As String, _
ByRef lpnSize As Long) As Long
Sub test()
Dim buffer As String
Dim size As Long
size = 255
buffer = Space(size)
GetComputerNameEx ComputerNameDnsFullyQualified, buffer, size
Debug.Print Left$(buffer, size)
End Sub
答案 0 :(得分:3)
即使你的帖子中有没有实际问题,我也会回复,除非你编辑它以添加有关特定与编程相关的问题,以及示例,您尝试过的详细信息以及实际问题。 (请参阅this和this以及this。)
简短的回答是:
真正想要访问您的工作簿(或任何其他Office文档)的任何人都可以快速进行Google搜索,以绕过您添加的任何安全“功能”。
AUTO_OPEN
宏和On Open
事件可以通过在打开或不信任其信任中心中的宏时按住 Shift 来轻松绕过。 (Here是Google搜索该主题的第一个结果。)
使用免费软件实用程序可以在几分钟内破解密码,或者只需几步即可手动破解密码。 (见我的回答here。)
如果您关心的人不熟悉计算机,我想您可以让工作簿默默地通知您打开的位置(例如IP address或{ {3}}))但是,再一次,这些可能是伪造的或完全绕过的。
假设问题是使用工作簿(或其包含的数据)的员工对“未经批准的目的”的关注,理想解决方案将是computer name,或者如果不是可能,start trusting your staff并找到您做信任的人。
以下是一个带有Workbook_Open
事件的工作簿示例,首先正常打开,然后通过稍微不同的方式打开工作簿来绕过:
作为开发人员,我经常会减少或关闭宏安全设置。但是,默认安装已启用安全性,即使已禁用,也不难重新启用安全性:
您认为可以执行或发现或强制执行代码而未经用户同意的任何内容将无法正常工作,并且至少会有解决方法。
将其与病毒扫描程序软件进行比较。
想象一下如果代码能够禁用您的病毒扫描程序会发生什么?这将使所有病毒扫描程序永远无法使用。如果可能的话,病毒创建者会定期这样做。
VBA宏安全选项也是如此:如果可以通过编程方式绕过它,“选项”将没有任何意义,甚至不会被包括在内。这不是便利的问题;这是安全性的问题。