2017-06-17 40 views
0

我有一個vba窗體。我想知道是否有辦法讓它只能在一臺計算機上運行,​​這樣如果有人想複製它,他們就不能在另一臺計算機上運行它。我想也許我們可以使用計算機的mac地址作爲安全模式。如何將宏運行到只有一臺計算機

有人嗎?


編輯:實現例如,從miroxlav's answer

Const AllowedName As String = "CEB-L1-7440236" 

Sub UserForm_click() 
    If Environ$("COMPUTERNAME") <> AllowedName Then 
     MsgBox ("Not authorized.") 
     Exit Sub 
    End If 

    If vbYes <> MsgBox("Launch the macro?", vbYesNo) Then Exit Sub 

    '--start of code what macro actually does 
    '.... 
    '.... 
    '.... 
    '--end of code what macro actually does 

    MsgBox ("Finsihed.") 

End Sub 
+0

密碼保護代碼,然後使用Environ(x)來識別用戶名或計算機? – jamheadart

+0

我看到..所以文件將檢查以查看Windows登錄或用戶帳戶,正確嗎?不知道如何編碼。 – Zhamepace

+0

例如,聲明'Dim x as String',然後使用'x = Environ(「computername」)'現在你可以檢查x =一個特定的計算機名稱 – jamheadart

回答

1
  1. 嵌入計算機名稱到您的VBA代碼,並添加一個測試吧。
  2. 密碼保護代碼模塊,以便其他人無法看到/修改它。

也許你想鎖定宏而不是用戶名,而不是鎖定到計算機名(所以授權用戶可以在任何計算機上使用它),但它在你身上。 -

' computer name 
? Environ$("COMPUTERNAME") 

' alternative: user name 
? Application.UserName 

例在宏模塊和If的頂部邊界Const線... EndIf只是你Sub宏行後:

Const AllowedName As String = "abcd" 
Sub UserForm_click() 
    If Environ$("COMPUTERNAME") <> AllowedName Then 
     MsgBox ("Not authorized.") 
     Exit Sub 
    End If 

    '--keep your original code here-- 
End Sub 

但是這一次可以使用相對容易規避命令行:

SET COMPUTERNAME=abcd 

曾經如此meone知道abcd是運行宏所需的正確計算機名稱。也許更喜歡用戶名檢查。相關的代碼行會變爲:

If Application.UserName <> AllowedName Then 

當然,你也可以使用VBA獲取計算機的MAC地址,只需搜索「MAC地址VBA」,有很多例子。

+0

您好在哪裏添加代碼??是在UserForm_click() – Zhamepace

+0

試用它UserForm_Initialise() – jamheadart

+0

@jamheadart - 只要插入它最適合你的地方。 – miroxlav

相關問題