【问题标题】:Excel VBA ChDir will not change my directoryExcel VBA ChDir 不会更改我的目录
【发布时间】:2021-07-23 07:07:54
【问题描述】:

我正在尝试让用户文件选择框自动打开到一个目录。

一切正常,但不是打开到正确的目录,我仍然需要点击到正确的目录。

我的代码如下。

ChDir ("\\file path string")
userFile = Application.GetOpenFilename(fileFilter:="csv Files(*.csv),*.csv", Title:="csv Files")
Workbooks.OpenText Filename:=userFile

我还可以让 ChDrive 之类的东西正常工作。该文件位于网络上。

谢谢

【问题讨论】:

  • 您是否在file path string 的最后一个字符中包含一个\?
  • ChDir 不会更改驱动器,只会更改为当前目录所在驱动器上的不同文件夹。
  • 我尝试在末尾添加一个 \ 无济于事。

标签: excel vba chdir


【解决方案1】:

当我需要将当前目录设置为网络共享时,我会使用它:

Option Explicit

Private Declare Function SetCurrentDirectoryA Lib _
    "kernel32" (ByVal lpPathName As String) As Long

Sub ChDirNet(szPath As String)
    Dim lReturn As Long
    lReturn = SetCurrentDirectoryA(szPath)
    If lReturn = 0 Then Err.Raise vbObjectError + 1, "Error setting path."
End Sub

Sub tester()

    ChDirNet "\\marge\bart\"

End Sub

【讨论】:

  • 感谢您的回复。我对 VBA 比较陌生,我无法让它为我工作。你能帮我破译这个或提供一个更简单的解决方案吗?
  • 当你尝试它时究竟会发生什么?
  • 简单地复制运行会使我停止编译错误,说必须更新代码才能在 32 位系统上使用。它还说我应该审查和更新 Declare Statements 并用 PtrSafe 属性标记它们。
【解决方案2】:

示例代码中缺少一个关键字“PtrSafe”,以便它可以在 64 位版本的 Office 上工作。代码应该是这样的

Option Explicit

Private Declare PtrSafe Function SetCurrentDirectoryA Lib _
    "kernel32" (ByVal lpPathName As String) As Long

Sub ChDirNet(szPath As String)
    Dim lReturn As Long
    lReturn = SetCurrentDirectoryA(szPath)
    If lReturn = 0 Then Err.Raise vbObjectError + 1, "Error setting path."
End Sub

Sub tester()

    ChDirNet "\\marge\bart\"

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2022-12-31
    • 2011-12-13
    相关资源
    最近更新 更多