【问题标题】:Writing VBA procedure/function to an .xlam addin将 VBA 过程/函数写入 .xlam 插件
【发布时间】:2016-03-28 02:21:02
【问题描述】:

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

当用户与文件交互时,模块尝试运行代码,但遇到错误(受密码保护的项目无法自行修改!嘿,我们都有自己的时刻: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 插件 (Updating an xlam add-in using VBA) 的信息,但我宁愿让它尽可能简单。非常感谢您的建议和提示。谢谢!

【问题讨论】:

    标签: vba excel-addins vbe


    【解决方案1】:

    使用不受保护的插件似乎是一种合理的方法。但是您发布的代码会写入 Protected 插件中的另一个 Module。您需要将另一个 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
    

    【讨论】:

    • 按照您的建议使用上述内容时,出现运行时错误“9”,下标超出范围。根据 excel,插件已安装,我还使用了一个唯一的插件名称,带有和不带 .xlam 扩展名,没有运气:/
    【解决方案2】:

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

    我仍然很好奇如何“直接”编写它,所以我会更多地尝试它,看看我是否得到它,虽然这种方式有效

    谢谢你:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多