我们目前进行了所有必要的更改,以使我们的VBA模板与32位和64位Office 2010一起使用。我们遇到了一个我一直试图解决的问题。
这是在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位的新方法,或者是否必须完全更改。
要使用64位的SetCurrentDirectory
API,您需要将PtrSafe
keyword添加到函数声明中:
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
和ChDrive
以及ChDir
? [SetCurrentDirectory
仅应传递驱动器号,例如这样:
ChDrive