将VBA过程/函数写入.xlam加载项



我在Excel中创建了一个VBA项目,该项目中有一个模块将代码写入另一个模块。我最终对该项目进行了密码保护,以便隐藏代码(没有立即意识到这会带来一些非常明显的问题)。

当用户与文件交互时,模块尝试运行代码,但遇到错误(受密码保护的项目无法修改自己!嘿,我们都有自己的duh时刻: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

虽然我在Stack和其他地方找到了一些关于.xlam加载项的信息(例如,使用VBA更新xlam加载项),但我宁愿尽可能简单。非常感谢您的建议和提示。谢谢

使用未受保护的Addin似乎是一种合理的方法。但是您发布的代码会写入受保护加载项中的另一个模块。您需要将另一个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

所以我找到了一种似乎可行的方法,我使用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)

我仍然很好奇如何"直接"写它,所以我会更多地玩它,看看我是否能得到它,尽管这种方式适用于

谢谢:)

最新更新