0

我们有一个基于一组 Excel 工作簿的产品,可在 Excel 2003 及更高版本上运行。一些工作簿打开同一目录中的其他工作簿以用作数据存储。最近,在尝试将其移植到 Mac Excel 2011 平台时,我们将工作簿从 .xls 转换为 .xlsm 格式。在与兼容性问题的日志斗争之后,我们让该产品在 Excel 2007 及更高版本上运行。

但是,当我们在安装了 Converter 模块的 Excel 2003 上进行测试时,我们的自相关工作簿链接全部中断。这是因为转换器在用户 Temp 目录中制作了工作簿的副本,该目录不在产品目录附近。用户可以选择安装产品的位置,因此产品目录的路径一直是自相关的,直到现在都运行良好。奇怪的是,一旦打开工作簿,如果您运行了 Workbook_Open 代码,它就会返回正确的路径。只有当工作簿实际打开时,才会出现问题。例如

Private Sub Workbook_Open()
    Dim appPath As String
    Dim FileName As String
    . . .
    appPath = Me.Path
#If Win32 Or Win64 Then
    FileName = appPath & "\" & "MMDataStore.xlsm"
#Else
    ' MAC support
    FileName = appPath & ":" & "MMDataStore.xlsm"
#End If
    MsgBox FileName
    Application.Workbooks.Open FileName
    MsgBox "Activate"
    Workbooks("MMDataStore.xlsm").Activate
    Me.Activate

...

第一次通过时,工作簿打开时,消息框指示文件名路径 (appPath) 位于 Temp 目录中(例如 C:\Users\njohnson\AppData\Local\Temp\MMDataStore.xlsm。如果您随后打开 Microsoft Visual Basic 并逐步执行相同的工作簿打开代码,它现在显示工作表在正确的目录中打开。有没有人对如何解决这个问题有任何想法?

谢谢,尼尔

4

1 回答 1

0

这似乎是微软的错误。我们的解决方法是将打开工作簿的代码移动到需要它的函数中,就像它需要它一样。例如,当用户想要从工作簿中检索数据或将数据存储到工作簿时,我们会检查它是否已经打开,如果没有,则在那时打开它。此时,所有指向工作簿的内部指针似乎都已解析,并且打开的工作簿工作正常。此解决方案适用于带有转换器的 Excel 2003。

于 2014-10-14T01:44:53.803 回答