【问题标题】:VBA Excel SetCurrentDirectory using (ActiveWorkbook.Path) does not work with 64-bit使用 (ActiveWorkbook.Path) 的 VBA Excel SetCurrentDirectory 不适用于 64 位
【发布时间】:2013-05-30 01:06:26
【问题描述】:

我们目前进行了所有必要的更改,以使我们的 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 位执行此操作的新方法,或者我是否必须彻底改变。

【问题讨论】:

  • 请注意,如果您的工作簿碰巧保存在未映射的网络驱动器上,ChDrive 将失败,例如如果ActiveWorkbook.Path\\mycompany\somedrive\somefolder。我刚刚学会了这一点。

标签: excel vba 32bit-64bit


【解决方案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
  • ChDrive 应该只传递一个驱动器号,例如:

    ChDrive Left(ActiveWorkbook.Path, 1)

【讨论】:

  • 我们没有使用 API,我们在 If 语句中有这个。我们使用 ChDrive 和 ChDir 来填充 SetCurrentDirectory。我们所做的是使用它来填充 SendAs 弹出窗口,这样它就不会将人扔到默认目录(我的文档)中。
  • 那么您的代码中的 SetCurrentDirectory 是什么?自定义函数?
  • 它是保存前步骤的自定义子类的一部分。因此,如果我想在这个子类中包含 API,我将如何使用 ActiveWorkbook.Path?
  • 您的代码是正确的,因为如果您按照我展示的方式声明了 api。我真的不知道您所说的“子类”是什么意思。如果您使用 API,则不需要 ChDrive 或 ChDir
  • 另一个问题,这段代码向后兼容吗?因此,如果我们将它与 Office 32 位一起使用,它会以相同的方式工作还是会引发错误?另外,我为我不正确的条款道歉,这是包含第一条语句的部分的第一行代码: Private Sub dynamic_Excelapp_workbookBeforeSave(ByVal I_book As Workbook, ByVal SaveAsUI As Boolean, cancel As Boolean) 那么我将把 Private在此声明?
猜你喜欢
  • 2015-11-04
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2017-03-26
  • 2020-09-21
  • 2013-09-11
相关资源
最近更新 更多