0

Excel 2003 以降で動作する一連の Excel ワークブックに基づく製品があります。ワークブックの中には、同じディレクトリ内の他のワークブックを開いてデータ ストアとして使用するものがあります。最近、これを Mac Excel 2011 プラットフォームに移植しようとして、ワークブックを .xls から .xlsm 形式に変換しました。互換性の問題のログと格闘した後、製品は Excel 2007 以降で動作します。

ただし、Converter モジュールがインストールされた Excel 2003 でのテストに戻ると、自己相対ブック リンクがすべて壊れてしまいます。これは、コンバーターが製品ディレクトリの近くにないユーザーの一時ディレクトリにワークブックのコピーを作成するためです。ユーザーは製品をインストールする場所を選択できるため、製品ディレクトリへのパスは常に自己相対であり、これまでは問題なく機能していました。奇妙なことに、ワークブックを開くと、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) が一時ディレクトリ (例: C:\Users\njohnson\AppData\Local\Temp\MMDataStore.xlsm) にあることが示されます。 Visual Basic で同じワークブックを開くコードをステップ実行すると、シートが正しいディレクトリで開かれていると表示されるようになりました。

ありがとう、ニール

4

1 に答える 1

0

これは Microsoft のバグのようです。私たちの回避策は、ワークブックを開くためのコードを、必要な関数に移動することでした。たとえば、ユーザーがワークブックからデータを取得したり、データをワークブックに保存したりしたい場合、既に開いているかどうかを確認し、開いていない場合はその時点で開きます。この時点で、ワークブックへのすべての内部ポインターが解決されたように見え、ワークブックを開くことが正しく機能しました。このソリューションは、コンバータを使用する Excel 2003 で機能します。

于 2014-10-14T01:44:53.803 に答える