2016-03-28 166 views
3

我在Excel中創建了一個VBA項目,並且在所述項目中是一個將代碼寫入另一個模塊的模塊。我最終密碼保護了項目,以便隱藏代碼(不會馬上意識到這會造成一些非常明顯的問題)。將VBA過程/函數寫入.xlam插件

當用戶與文件交互時,模塊會嘗試運行代碼,但遇到錯誤(密碼保護的項目無法自行修改!嘿,我們都有我們的時刻:p)。

因此,爲了解決這個問題,我想'爲什麼不讓編輯的部分不受保護',同時保持文件的其餘部分被鎖定。所以我想我會創建一個不受保護的.xlam加載項,然後將所述代碼寫入該部分。然而,我有一些困難想辦法做到這一點。下面是我寫的代碼,編寫代碼到另一個模塊:

Public Sub errorWrite() 

Dim VBComp As VBIDE.VBComponent 
Dim CodeMod As VBIDE.CodeModule 
Dim s As String 
Dim d As String 
Dim lineNumb As Long 

With ThisWorkbook.VBProject.VBComponents.item("NewModule") 
.CodeModule.InsertLines j, "Public sub newModule()" 

j = j + 1 

With ThisWorkbook.VBProject.VBComponents.item("NewModule") 
.CodeModule.InsertLines j, "(my code etc..)" 

j = j + 1 

    With ThisWorkbook.VBProject.VBComponents.item("NewModule") 
.CodeModule.InsertLines j, "end sub" 


end sub 

雖然我發現對堆棧的一些信息和其他有關例如.xlam插件(Updating an xlam add-in using VBA),我寧願只是不停地儘可能簡單。建議和提示非常感謝。謝謝!

回答

1

使用未受保護的Addin似乎是一種合理的方法。但是您發佈的代碼會寫入另一個模塊內的受保護的插件。你需要參考其他外接程序作爲VBProject

更改您的未受保護的加載項的名稱爲獨特名稱(默認爲VBAProject而不必是唯一的)

然後創建對它的引用這樣

Dim VBP As VBProject 
Set VBP = ThisWorkbook.VBProject.VBE.VBProjects("NameOfYourUnprotectedAddin") 

然後所有的代碼使用此引用,而不是ThisWorkbook.VBProject

With VBP.VBComponents.item("NewModule") 
    .CodeModule.InsertLines j, "Public sub newModule()" 
' etc 

End With 
+0

當使用上述如你所說,我得到一個運行時錯誤「9」,下標超出範圍。根據excel,外掛程序已安裝,我還使用了一個獨特的外掛程序名稱,並帶有.xlam擴展名,沒有運氣:/ – Singularity20XX

0

所以我能夠找到一種似乎工作的方式,我使用FSO編寫代碼,然後將該文件保存爲.bas模塊。從那裏我用下面的具有直接導入到.xlam插件作爲一個模塊的模塊:

Public Sub importBas() 
Dim VBP As VBProject 
Set VBP = Workbooks("example.xlam").VBProject 

VBP.VBComponents.Import ("C:\Users\...example.bas") 
VBP.VBComponents.Remove 

End Sub 

然後,原始模塊中,我的xlam內刪除過程的執行結束之後。因此,沒有代碼可以看到(假設我記得使用錯誤處理和禁用中斷模式:p)

我仍然好奇如何直接寫它,所以我會更多地玩它,看看我是否得到它,雖然這樣的工作

謝謝:)