平時我們可以使用鼠標右鍵中的復制粘貼來拷貝任何一個或多個文件。在Excel中,如果要想禁止Excel文件被拷貝復制,即不能使用復制粘貼來拷貝一個工作薄,沒有絕對的辦法,只有相對的辦法。
比如,不允許使用復制粘貼功能將Excel文件從電腦A復制到電腦B,那么,我們如何能做到這種效果呢?
方法是有的,但是只能使用VBA來實現(xiàn),而所能實現(xiàn)的結果,只能起到無法使用的目的,并非真正的防止復制粘貼目的。
一、理論根據(jù)
首先我們通過VBA代碼,獲取電腦A上的硬盤序列號,將其保存在Excel工作薄中的第一個工作表的某個單元格內,然后,再通過VBA代碼,添加工作薄打開的事件,再次獲取電腦上的硬盤序列號,對比單元格內的值,如果兩值相同,說明是同一臺電腦,允許打開并使用工作薄,如果不相同,說明,該文件已被復制到其它電腦使用,那么,就通過VBA代碼將工作薄關閉。
因為每臺電腦的硬盤序列號都是不相同的,事先就將當前的電腦比如電腦A的序列號,保存到工作表里面了,而以后每次打開工作薄,都獲取硬盤序列號來和該單元格內的序列號相比,如果相同,則為同臺電腦,不相同,則為另外的電腦,這說明已經(jīng)被復制到其它電腦使用了,這樣就通過VBA代碼關閉工作薄,不允許用戶使用即可。
二、實現(xiàn)方法
首先新建一個工作薄,將其保存到你的電腦中的任何位置。
接著,給你的這個工作薄添加如下事件的代碼:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MyDiskCode
Set MyDiskCode = GetObject("Winmgmts:").InstancesOf("Win32_DiskDrive")
For Each mo In MyDiskCode
Sheet1.Cells(999, 256).Value = mo.Model
Next
End Sub
如上的代碼功能是,將當前電腦的序列號,保存在第999行第256列的單元格內。
記住,事件代碼別錯了,是這個Worksheet_SelectionChange。
然后,返回到工作表1,隨便點擊任何一個單元格,這樣第999行第256列的單元格的值就變成硬盤序列號的內容了,之后,就將如上代碼刪除。記住,刪除如上代碼不再使用。
最后,就進入到每次打開工作薄用來判斷硬盤序列號是否與第999行第256列的單元格內的值一致的代碼了,代碼如下:
Private Sub Workbook_Open()
Dim MyDiskCode
Set MyDiskCode = GetObject("Winmgmts:").InstancesOf("Win32_DiskDrive")
For Each mo In MyDiskCode
MyNewCode = mo.Model
Next
If (MyNewCode <> Trim(Sheet1.Cells(999, 256).Value)) Then
ThisWorkbook.Close
End If
End Sub
注意,如上代碼的事件是工作薄的打開事件,為 Workbook_Open,你可別弄錯了哦。
而如下代碼
If (MyNewCode <> Trim(Sheet1.Cells(999, 256).Value)) Then
ThisWorkbook.Close
End If
是用來對比判斷硬盤序列號是否一致的代碼。如果不一致,就通過ThisWorkbook.Close語句關閉工作薄。
看懂了,你就可以試試了,試好了之后,把工作薄文件復制到其它電腦,然后你雙擊打開試試,你就看到效果了。經(jīng)本站測試,代碼成功無誤。希望對你有所幫助。
聯(lián)系客服