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