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组件版本的工具?
两个建议
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
希望这可以帮助
希德