首页 > 解决方案 > 使用 VBA 复制模块后的 MacOS Excel 内部错误

问题描述

我需要以编程方式将一个模块(来自 Tim Hall 的词典 - https://github.com/timhall/VBA-Dictionary)从一个工作簿复制到另一个工作簿。为此,我正在使用这段代码:

Sub CopyMacrosToExistingWorkbook(SourceWB As Workbook, strModuleName As String, TargetWB As Workbook)
    Dim SourceVBProject As VBIDE.VBProject, DestinationVBProject As VBIDE.VBProject
    Set SourceVBProject = SourceWB.VBProject
    Set DestinationVBProject = TargetWB.VBProject

    Dim SourceModule As VBIDE.CodeModule, DestinationModule As VBIDE.VBComponent
    Set SourceModule = SourceVBProject.VBComponents(strModuleName).CodeModule

    Set DestinationModule = DestinationVBProject.VBComponents.Add(SourceModule.Parent.Type)
    DestinationModule.Name = strModuleName

    With SourceModule
        DestinationModule.CodeModule.AddFromString .Lines(1, .CountOfLines)
    End With
End Sub

在 Windows 上一切顺利,但在Mac (Office 365 版本 16.29)上,我将导入此 Dictionary 模块的文件不起作用。它无法保存,它会将这个内部错误写给我:

在此处输入图像描述 在此处输入图像描述

有趣的是,将这个损坏的文件复制到 Windows、打开、保存并返回给 Mac 就足够了。但这对我来说还不够。

我发现,如果我从 Dictionary 类模块中删除这段代码,“内部错误”不会显示,但我不能在没有这段代码的情况下使用该模块:

Public Enum CompareMethod
    BinaryCompare = VBA.vbBinaryCompare
    TextCompare = VBA.vbTextCompare
    DatabaseCompare = VBA.vbDatabaseCompare
End Enum

所以我想,这个 Enum 类有问题。什么或哪里可能是问题?我找不到它。谢谢你的帮助。

标签: excelvbamacosmoduleoffice365

解决方案


这是一个很长的镜头,但是您是否尝试过使用 Excel 16.28?

自 16.12 以来,我有几个运行良好的宏,但在升级到 16.29 后,我遇到了一些错误,我无法理解代码有什么问题。

我恢复到 16.28,一切都很好。


推荐阅读