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

问题描述 投票:0回答:1

我们目前进行了所有必要的更改,以使我们的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位的新方法,或者是否必须完全更改。

excel vba 32bit-64bit
1个回答
1
投票

要使用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

© www.soinside.com 2019 - 2024. All rights reserved.