我们目前进行了必要的所有更改,以使我们的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位是否有新方法,或者我必须彻底改变。
答案 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
顺便说一下:
ChDrive
和ChDir
以及SetCurrentDirectory
? ChDir
只应传递一个驱动器号,例如:
ChDrive Left(Activeworkbook.Path, 1)