限制Excel工作表仅在组织网络内打开

时间:2018-03-16 12:36:09

标签: excel vba excel-vba

我想限制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

1 个答案:

答案 0 :(得分:3)

即使你的帖子中有没有实际问题,我也会回复,除非你编辑它以添加有关特定与编程相关的问题,以及示例,您尝试过的详细信息以及实际问题。 (请参阅thisthis以及this。)

简短的回答是:

这不可能。

真正想要访问您的工作簿(或任何其他Office文档)的任何人都可以快速进行Google搜索,以绕过您添加的任何安全“功能”。

AUTO_OPEN宏和On Open事件可以通过在打开或不信任其信任中心中的宏时按住 Shift 来轻松绕过。 (Here是Google搜索该主题的第一个结果。)

使用免费软件实用程序可以在几分钟内破解密码,或者只需几步即可手动破解密码。 (见我的回答here。)

如果您关心的人不熟悉计算机,我想您可以让工作簿默默地通知您打开的位置(例如IP address或{ {3}}))但是,再一次,这些可能是伪造的或完全绕过的。

假设问题是使用工作簿(或其包含的数据)的员工对“未经批准的目的”的关注,理想解决方案将是computer name,或者如果不是可能,start trusting your staff并找到您信任的人。

编辑:绕过Workbook_Open

以下是一个带有Workbook_Open事件的工作簿示例,首先正常打开,然后通过稍微不同的方式打开工作簿来绕过:

example screenshot: protected view

编辑:阻止任何代码运行

作为开发人员,我经常会减少或关闭宏安全设置。但是,默认安装已启用安全性,即使已禁用,也不难重新启用安全性:

  • 档案选项信托中心

you need to fire them

您无法强制代码以编程方式运行或绕过安全性。

您认为可以执行或发现或强制执行代码而未经用户同意的任何内容将无法正常工作,并且至少会有解决方法。

为什么?

将其与病毒扫描程序软件进行比较。

想象一下如果代码能够禁用您的病毒扫描程序会发生什么?这将使所有病毒扫描程序永远无法使用。如果可能的话,病毒创建者会定期这样做。

VBA宏安全选项也是如此:如果可以通过编程方式绕过它,“选项”将没有任何意义,甚至不会被包括在内。这不是便利的问题;这是安全性的问题。