有关调试计算机专用Excel VBA问题的建议

nic*_*556 4 excel vba excel-vba

我有一个Excel工作簿,依赖于其他Excel工作簿中的代码(这些依赖.xls是VB级别的引用,即通过VBA编辑器中的Tools-> References对话框),以及对dll的一些依赖,例如:Microsoft Scripting运行时Microsoft Forms 2.0对象库

这张表在大约20台运行Windows XP和Office XP的计算机上工作了大约2年.最近我们收到了3台新机器(相同的操作系统,相同的办公室版本)拒绝运行此表.当工作表打开时,它会抛出"编译错误",并且会话挂起.

如果我在'坏'机器上打开工作表,按住左移键以停止宏运行,然后转到VBA编辑器 - >调试 - >编译VBAProject,它编译得很好.然后,我可以保存工作表并在"坏"机器上正常打开它.然而,这个新版本的表格拒绝在"好"的机器上运行!

我认为在'好'和'坏'机器上的某些dll之间必定存在某种版本不匹配.如何确定导致问题的原因?有没有可用于比较com组件版本的工具?

Sid*_*out 7

两个建议

1)首先打开禁用宏的文件.然后检查VBA编辑器| 工具| 参考文献.检查是否有任何缺失的参考文献,然后告诉我们它们是什么.我们将从那里拿走它.

2)对于像" Microsoft Scripting Runtime Object Library " 这样的引用,我从不使用Early Binding.早期绑定是造成这类错误的主要原因.仅供参考:早期绑定是通过VBA编辑器预先创建参考 工具| 参考文献.我建议将代码更改为Late Binding.以下是使用具有早期绑定和后期绑定的" Microsoft Scripting Runtime Object Library " 的相同代码的2个示例

早期的约束例子

'~~> Set Reference to "Microsoft Scripting Runtime Object Library"

Sub EBExample()
    Dim FSO As Scripting.FileSystemObject
    Dim SourceFolder As Scripting.Folder
    Dim FileItem As Scripting.File

    Set FSO = New Scripting.FileSystemObject
    Set SourceFolder = FSO.GetFolder(SourceFolderName)

    For Each FileItem In SourceFolder.Files
        '~~> You code
    Next FileItem
End Sub
Run Code Online (Sandbox Code Playgroud)

后期绑定示例

'~~> This doesn't need a reference
Sub LBExample()
    Dim FSO As Object, SourceFolder As Object, FileItem As Object

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = FSO.GetFolder(SourceFolderName)

    For Each FileItem In SourceFolder.Files
        '~~> You code
    Next FileItem
End Sub
Run Code Online (Sandbox Code Playgroud)

至于我,我使用早期绑定来利用Intellisense,然后将其转换为后期绑定,以避免在分发代码之前的特定于版本的代码.代码始终有效.:)

IMP注意:在目标计算机没有注册相关dll的情况下,延迟绑定失败.

推荐链接:

主题:在Automation中使用早期绑定和后期绑定

链接:http://support.microsoft.com/kb/245115

希望这可以帮助

希德

  • +1有趣的策略.应该指出的是,它与微软的不同.引自[链接](http://support.microsoft.com/kb/245115):"早期绑定的优势使其成为可能的最佳选择.[...]早期绑定是首选方法.[ ..]微软建议在几乎所有情况下都要提前绑定." 虽然可能不在*这个特殊情况下. (2认同)