0

現在、VBA テンプレートを Office 2010 32 ビットおよび 64 ビットで動作させるために必要なすべての変更を行っています。私が解決しようとしてきた 1 つの問題に直面しています。

これは、DynamicXLSAppHandler 内で 32 ビットのみで機能していたコードです。

Dim L_Return As Long

'Set Current Directory in SaveAs dialog
If ActiveWorkbook.Path <> "" Then
    ChDrive (ActiveWorkbook.Path)
    ChDir (ActiveWorkbook.Path)
    L_Return = SetCurrentDirectory(ActiveWorkbook.Path)
End If

このコードの目的は、ユーザーが [保存] または Ctrl-S をクリックすると、最初にドキュメント/テンプレートを開いたディレクトリ (パス) に [名前を付けて保存] ダイアログが表示されることです。このコードがないと (64 ビットの非互換性のため)、デフォルトで「ドキュメント」が開かれるだけになり、ユーザーは元のパスを参照する必要があります。

64ビットでこれを行う新しい方法があるのか​​ 、それとも完全に変更する必要があるのか​​ 疑問に思っています.

4

1 に答える 1

3

SetCurrentDirectory64 ビットで APIを使用するには、関数宣言にPtrSafeキーワードを追加する必要があります。

#If VBA7 Then
    Private Declare PtrSafe Function SetCurrentDirectory Lib "kernel32" _
        Alias "" SetCurrentDirectoryA(ByVal lpPathName As String) As Long 
#Else
    Private Declare Function SetCurrentDirectory Lib "kernel32" _
        Alias "" SetCurrentDirectoryA(ByVal lpPathName As String) As Long 
#End If

ところで:

  • なぜChDriveChDirだけでなくが必要なのSetCurrentDirectoryですか?
  • ChDriveたとえば、次のように、ドライブ文字のみを渡す必要があります。

    ChDrive Left(ActiveWorkbook.Path, 1)

于 2013-06-03T20:10:34.763 に答える