Excel 2003 - 2007文件转换器将与工作簿相关的文件路径分解为其他工作簿

时间:2014-09-04 00:32:01

标签: excel excel-vba excel-2003 xlsm vba

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

但是,当我们在安装了Converter模块的Excel 2003上进行测试时,我们的自相关工作簿会将所有内容链接起来。这是因为转换器在用户Temp目录中创建工作簿的副本,该目录不在产品目录附近。用户可以选择安装产品的位置,因此产品目录的路径始终是自相关的,到目前为止一直运行良好。奇怪的是,一旦工作簿打开,如果您运行了Workbook_Open代码,它将返回正确的路径。只有当工作簿实际打开时,你才遇到问题。 e.g。

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并逐步执行相同的工作簿开放代码,它现在显示工作表在正确的目录中打开。有没有人对如何解决这个问题有任何想法?

谢谢,Neil

1 个答案:

答案 0 :(得分:0)

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