2016-12-13 47 views
4

我有我的第一個「客戶端 - 我的工作,然後幻影 - 我沒有付費」的經驗。對於將來,我想把一個僞裝成常規宏的殺戮開關放進去,這使得整個事情變得不可用。這樣,即使他們聘請某人破解密碼並刪除我的「您的試用已過期...」檢查,一個看起來很正常的宏(像「Fix_Sheet_Formatting」之類的東西)將很容易被忽略並運行,破壞所有內容並保存變化。Excel VBA自毀式開關

但是,這留下了VBA ......我們在這裏說的是徹底清除,所以一切都必須去。我會弄清楚如何這一切對我自己,我只是不想浪費時間去追求的東西是不可能的:

能VBA代碼刪除本身從一個工作簿,而運行或是否已將從另一個工作簿上的宏中刪除?並刪除代碼會導致宏停止運行,或者我可以刪除一切,除了一個討厭的MsgBox一切完成後?

+2

[也許有關](http://www.ozgrid.com/VBA/delete-module.htm) – Moacir

+2

是的,不,你可以試試[寫出excel VBA本身](http://www.cpearson。 com/excel/vbe.aspx)或者[這一個](http://www.snb-vba.eu/VBA_Excel_VBproject_en.html),然而,對於一些中等用戶來說它並不難,Excel不是一個可靠的保持您的工作版權的工具。 – Sgdva

+0

它看起來像掛斷將訪問VBProject對象。這將被防病毒軟件所捕獲並移除模塊(我不想那麼做,因爲他們需要使用它來測試它,否則殺死開關將被刪除)。 –

回答

5

我會留下評論來辯論這是否是一個好主意(恕我直言,它可能不是)。至於這個問題本身,當然這是可能的,並且不會中斷宏執行:

Public Sub Example() 
    Dim proj As Object 
    Set proj = ThisWorkbook.VBProject 
    Dim comp As Object 
    For Each comp In proj.VBComponents 
     With comp.CodeModule 
      .DeleteLines 1, .CountOfLines 
      If comp.Name = "ThisWorkbook" Then 
       .InsertLines 1, "Private Sub Workbook_Open()" & vbCrLf & _ 
           vbTab & "MsgBox ""Where's my money, @#$%&!?""" & vbCrLf & _ 
           "End Sub" 
      End If 
     End With 
    Next 
    ThisWorkbook.Save 
End Sub 

混淆是對讀者的練習。

+0

第一次聽到混淆。更好的解決方案。 –

+0

@ C-Love511 - 在更嚴格的說明中(我只是想添加'MsgBox'),你也可以看看運行預裝的代碼。 – Comintern

+2

@ C-Love511注意:如果沒有模糊處理,這段代碼將會破壞*當前正在運行的啓用宏的工作簿的一個副本*。如果您的用戶製作了副本,甚至只是備份他們的網絡文件夾,他們總是可以恢復備份並誘使您的代碼相信該試用版仍然有效,直到他們找出破解代碼並對其進行調整的方式。正確地混淆,他們可以做到這一點,並打開代碼......只是發現沒有什麼有意義的東西可以看到,而且反向工程將會花費更多的成本,而不僅僅是支付你的工作費用。 –