【问题标题】:Rename File on Different Drive Using VBA使用 VBA 重命名不同驱动器上的文件
【发布时间】:2018-03-28 20:12:37
【问题描述】:

我在工作表中有一个文件名列表。我想读取一个名称,找到实际文件,重命名它并继续使用下一个名称。

第一部分,从工作表中检索名称并将其修改为新名称不是问题。问题是为文件分配新名称。

名称功能不起作用,因为文件位于不同的驱动器上。我还尝试了 Scripting.FileSystemObject。

代码运行但未进行任何更改。 这是我使用的代码...

Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set f = fso.GetFile(fOldName)
If Not Err = 53 Then 'File not found
  'Rename file
  f.Name = fNewName
End If

我是否犯了一个我没有看到的代码错误?我应该使用/做其他事情吗?

如今,找到有关 VBA 和/或 VB6 的信息变得非常罕见。

顺便说一句。这是针对 Excel 2016 的。

Tks

【问题讨论】:

  • "名称可以跨驱动器移动文件,但只有当新路径名和旧路径名都位于同一驱动器上时,它才能重命名现有目录或文件夹"... 那么为什么不先移动文件呢?重命名它?
  • 文件在远程驱动器上。我尝试了 Name 函数,它导致编译错误。我使用 FSO,它不会访问远程驱动器。我硬编码了本地驱动器文件的路径,它可以工作。远程驱动器文件的硬编码路径,它给我“找不到文件”错误。
  • 它是映射驱动器,UNC 路径吗?提供更多上下文。
  • 这些文件位于 USB HD 上。它被识别为我计算机上的本地驱动器,所以我为什么会有任何问题。我确实喜欢这种类型的问题论坛。我突然想到高清可能有问题。我会检查。与此同时,我的代码不应该工作吗?显然你什么都没有跳出来,所以我的语法一定是正确的。
  • @Don6558,我在下面的回答不是作为解决方案发布的,而是作为低级分步工具发布的,它可能不适用于您当前的环境,但它可能有助于解决问题。

标签: vba excel


【解决方案1】:

如果没有误会的话……

FSO...无论如何都不好。它只是一个错误的 API 包装器,用左鸡爪编写。 对于更复杂的情况,有纯 VB 和 API。

没有外部库和对象:

Public Sub sp_PrjFilMov()
Dim i As Byte
Dim sNam$, sExt$, sPthSrc$, sPthTgt$, sDir$

    sPthSrc = "V:\"
    sPthTgt = "R:\"

    sNam = "Empty_"
    sExt = ".dmy"   ' dummy

    For i = 1 To 5 ' create set of files for test
        Call sx_CrtFil(i, sPthSrc, sNam, sExt)
    Next

    sDir = Dir(sPthSrc & "*" & sExt, vbNormal) ' lookup for our files ..
    Do
        'Debug.Print sDir
        Select Case LenB(sDir)
            Case 0
                Exit Do         ' *** EXIT DO
            Case Else
                Call sx_MovFil(sPthSrc, sDir, sPthTgt) ' ..  & move them to another disk
                sDir = Dir
        End Select
    Loop
    Stop
End Sub

Private Sub sx_CrtFil(pNmb As Byte, pPth$, pNam$, pExt$)
Dim iFilNmb%
Dim sFilNam$
    sFilNam = pPth & pNam & CStr(pNmb) & pExt
    iFilNmb = FreeFile
    Open sFilNam For Output As #iFilNmb
    Close #iFilNmb
End Sub

Private Sub sx_MovFil(pPnmSrc$, pFnm$, pPthTgt$)
Dim sSrcPne$
    sSrcPne = pPnmSrc & pFnm
    'Debug.Print "Move " & sSrcPne & " --> " & pPthTgt
    Call FileCopy(sSrcPne, pPthTgt & pFnm)
    Call Kill(sSrcPne)
End Sub
'

【讨论】:

  • 我刚刚回到这个项目。我现在意识到我遇到的问题与参考有关。我试图添加对 VBA 的引用,excel 告诉我“名称冲突”。我已经搜索找到我应该添加什么参考来访问 FileCopy 并且找不到任何信息。我曾经在 VBA 和 VB 6 中编写过很多程序,而在我的一生中,我不记得必须为文件访问添加参考。相信我,我非常感谢您的帮助,但我在这个问题上浪费了太多时间。我会做一个 vb.net 应用程序。
猜你喜欢
  • 1970-01-01
  • 2013-03-23
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多