使用(ActiveWorkbook.Path)的VBA Excel SetCurrentDirectory不适用于64位

时间:2013-06-03 19:20:24

标签: excel vba 32bit-64bit

我们目前进行了必要的所有更改,以使我们的VBA模板与Office 2010 32位和64位一起使用。我们遇到了一个我一直试图解决的问题。

这是在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位不兼容),它现在只打开“Documents”作为默认值,用户需要浏览到原始路径。

我想知道64位是否有新方法,或者我必须彻底改变。

1 个答案:

答案 0 :(得分:1)

要在64位中使用SetCurrentDirectory API,您需要将PtrSafe keyword添加到函数声明中:

#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
  • ChDir只应传递一个驱动器号,例如:

    ChDrive Left(Activeworkbook.Path, 1)