代码之家  ›  专栏  ›  技术社区  ›  Arkitec

Excel 2003-2007文件转换器断开工作簿到其他工作簿的相对文件路径

  •  0
  • Arkitec  · 技术社区  · 11 年前

    我们有一个基于一组Excel工作簿的产品,该工作簿从Excel 2003开始运行。某些工作簿在同一目录中打开其他工作簿,用作数据存储。最近,为了将其移植到Mac Excel 2011平台,我们将工作簿从.xls格式转换为.xlsm格式。在经历了一系列兼容性问题后,我们的产品开始在Excel 2007上运行。

    然而,当我们在安装了Converter模块的Excel 2003上进行测试时,我们的自相关工作簿链接全部中断。这是因为转换器在users 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并单步执行相同的工作簿打开代码,则现在会显示工作表已在正确的目录中打开。有人想过如何解决此问题吗?

    谢谢,尼尔

    1 回复  |  直到 8 年前
        1
  •  0
  •   Arkitec    11 年前

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