0

我们目前进行了所有必要的更改,以使我们的 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 位不兼容),它现在只会默认打开“文档”,用户需要浏览到原始路径。

我想知道是否有针对 64 位执行此操作的新方法,或者我是否必须完全改变。

4

1 回答 1

3

SetCurrentDirectory在 64 位中使用 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

顺便一提:

  • 为什么需要ChDriveand ChDiras well as SetCurrentDirectory
  • ChDrive应该只传递一个驱动器号,例如这样:

    ChDrive Left(ActiveWorkbook.Path, 1)

于 2013-06-03T20:10:34.763 回答