平時(shí)我們可以使用鼠標(biāo)右鍵中的復(fù)制粘貼來拷貝任何一個(gè)或多個(gè)文件。在Excel中,如果要想禁止Excel文件被拷貝復(fù)制,即不能使用復(fù)制粘貼來拷貝一個(gè)工作薄,沒有絕對(duì)的辦法,只有相對(duì)的辦法。 比如,不允許使用復(fù)制粘貼功能將Excel文件從電腦A復(fù)制到電腦B,那么,我們?nèi)绾文茏龅竭@種效果呢? 方法是有的,但是只能使用VBA來實(shí)現(xiàn),而所能實(shí)現(xiàn)的結(jié)果,只能起到無法使用的目的,并非真正的防止復(fù)制粘貼目的。 一、理論根據(jù) 首先我們通過VBA代碼,獲取電腦A上的硬盤序列號(hào),將其保存在Excel工作薄中的第一個(gè)工作表的某個(gè)單元格內(nèi),然后,再通過VBA代碼,添加工作薄打開的事件,再次獲取電腦上的硬盤序列號(hào),對(duì)比單元格內(nèi)的值,如果兩值相同,說明是同一臺(tái)電腦,允許打開并使用工作薄,如果不相同,說明,該文件已被復(fù)制到其它電腦使用,那么,就通過VBA代碼將工作薄關(guān)閉。 因?yàn)槊颗_(tái)電腦的硬盤序列號(hào)都是不相同的,事先就將當(dāng)前的電腦比如電腦A的序列號(hào),保存到工作表里面了,而以后每次打開工作薄,都獲取硬盤序列號(hào)來和該單元格內(nèi)的序列號(hào)相比,如果相同,則為同臺(tái)電腦,不相同,則為另外的電腦,這說明已經(jīng)被復(fù)制到其它電腦使用了,這樣就通過VBA代碼關(guān)閉工作薄,不允許用戶使用即可。 二、實(shí)現(xiàn)方法 首先新建一個(gè)工作薄,將其保存到你的電腦中的任何位置。 接著,給你的這個(gè)工作薄添加如下事件的代碼: Private Sub Worksheet_SelectionChange(ByVal Target As Range) 如上的代碼功能是,將當(dāng)前電腦的序列號(hào),保存在第999行第256列的單元格內(nèi)。 記住,事件代碼別錯(cuò)了,是這個(gè)Worksheet_SelectionChange。 然后,返回到工作表1,隨便點(diǎn)擊任何一個(gè)單元格,這樣第999行第256列的單元格的值就變成硬盤序列號(hào)的內(nèi)容了,之后,就將如上代碼刪除。記住,刪除如上代碼不再使用。 最后,就進(jìn)入到每次打開工作薄用來判斷硬盤序列號(hào)是否與第999行第256列的單元格內(nèi)的值一致的代碼了,代碼如下: Private Sub Workbook_Open() 注意,如上代碼的事件是工作薄的打開事件,為 Workbook_Open,你可別弄錯(cuò)了哦。 而如下代碼 If (MyNewCode <> Trim(Sheet1.Cells(999, 256).Value)) Then 是用來對(duì)比判斷硬盤序列號(hào)是否一致的代碼。如果不一致,就通過ThisWorkbook.Close語句關(guān)閉工作薄。 |
|