拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 仅复制VBA组件(Modules、ThisWorkBook)中的书面代码(文本)

仅复制VBA组件(Modules、ThisWorkBook)中的书面代码(文本)

白鹭 - 2022-02-23 2115 0 0

我有一个 Excel 启用宏的报告作业簿,每个作业表(包括“ThisWorkBook”组件)中都有一些代码,它会生成它的无宏版本供我的老板审查。我的老板几乎总是对那个“.xlsx”档案进行一些修改,我想将我所有的书面代码转移到这本编辑过的无宏书籍并再次保存为“.xlsm”。

如何仅访问和复制这些组件内的书面代码?

uj5u.com热心网友回复:

可以复制 VBA 代码(例如,请参阅将所有 VBA 代码从作业簿复制到另一个),但这并不容易。

我会建议以下替代方案:

1)将档案作为 XLSM 档案发送以供审核。如果你想防止某些宏被执行,你可以创建一个小函式(让它成为一个函式,而不是在每个地方硬编码用户名,这样你就可以很容易地改变它)。

Function UserMacrosAllowed() As Boolean
    UserMacrosAllowed = (Environ("UserName") = "milad")
End Function

然后,将以下陈述句放在不应由您的老板执行的例程的顶部,例如:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not UserMacrosAllowed Then Exit Sub
    (...)
End Sub

2)如果这不可行,创建一个没有任何资料的模板档案,只包含所有代码,并将xlsx 档案资料复制到其中。这应该容易得多。

uj5u.com热心网友回复:

使用 FunThomas 提供的链接,我想出了我的解决方案:

Sub ExportCodes()

Dim newWithMacro as workbook

For Each Component In ThisWorkBook.VBProject.VBComponents
    If Component.Type = 100 And Component.CodeModule.CountOfLines <> 0 Then
        Text = Component.CodeModule.Lines(1,Component.CodeModule.CountOfLines)
        newWithMacro.VBProject.VBComponents(Component.Name).CodeModule.AddFromString (Text)
    End If
Next Component

End sub
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *