移动带有名称的文件会导致错误5,无效的过程调用或参数

时间:2017-07-11 11:02:06

标签: excel vba

看来我的硬盘本身有些问题。它表现得很奇怪。有些文件显示重复,我删除重复项。几分钟后,我刷新目录,然后又回来了。再次刷新,他们走了。文件在一台计算机上可见,但在另一台计算机上我会尝试麻烦拍摄它,看看问题出在哪里。感谢所有帮助到目前为止,可能不止一个问题一起行动。

我已经使用此代码在我的网络驱动器上重命名文件并将文件从一个位置移动到另一个位置。

视频文件名为00001,00002等。由于计数器重置,我需要将文件重命名为可以在硬盘上运行的文件。

因此所有文件都重命名为<date> <time>.MTS

这段代码以前有用,但现在它因某种原因停止了工作。

Sub MoveFiles()
    Dim r As Integer
    r = 2 'first line of files
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    Do Until IsEmpty(Cells(r, "A")) Or IsEmpty(Cells(r, "B"))
        dirPath = Cells(r, "C") + "\" + Cells(r, "B")
        If objFSO.FileExists(dirPath) Then
            ' file exist output error message
            MsgBox ("Filen finns redan!!! " + Cells(r, "A") + "   " + Cells(r, "B"))
        Else
            FromName = ActiveWorkbook.Path + "\" + Cells(r, "A")
            ToName = Cells(r, "C") + "\" + Cells(r, "B")

            ' none of the methods below work.
            Name FromName As ToName
            Name ActiveWorkbook.Path + "\" + Cells(r, "A") As Cells(r, "C") + "\" + Cells(r, "B")
        End If
        r = r + 1
    Loop



End Sub

enter image description here

由于代码不会创建ToName存在的错误消息,因此它不是&#34;重复的&#34;问题。
如果我运行以下代码

If objFSO.FileExists(ActiveWorkbook.Path + "\" + Cells(r, "A")) Then
    MsgBox "test"
End If

我收到消息框,这意味着FromName文件存在。

因此,简而言之,文件存在并且它将成为不存在的文件名。路径(目录)也存在,因为它们是在早期的sub()中创​​建的。我仔细检查过它。那么问题是什么呢? 我完全迷失在这里。

编辑;添加了工作簿图片:
enter image description here

1 个答案:

答案 0 :(得分:1)

应该这样做(未经测试 - YMMV):

Option Explicit

Sub MoveFiles()
    Dim rownum As Long
    rownum = 2 'first line of files
    Dim objFSO As Object        ' Required because of Option Explicit
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    Dim FromName as String
    Dim ToName as String

    Do Until IsEmpty(Cells(rownum, "A")) Or IsEmpty(Cells(rownum, "B")) or rownum > 1048576
        ToName = CStr(Cells(rownum, "C")) + "\" + CStr(Cells(rownum, "B"))
        If objFSO.FileExists(ToName) Then
            ' file exist output error message
            MsgBox ("Filen finns redan!!! " + Cells(rownum, "A") + "   " + Cells(rownum, "B"))
        Else
            FromName = ActiveWorkbook.Path + "\" + CStr(Cells(rownum, "A"))

            ' none of the methods below work.
            '' Name FromName As ToName
            '' Name ActiveWorkbook.Path + "\" + Cells(rownum, "A") As Cells(rownum, "C") + "\" + Cells(rownum, "B")

            objFSO.MoveFile FromName, ToName

        End If
        rownum = rownum + 1
    Loop

End Sub

有些事情发生了变化:

  • Option Explicit:始终在每个VBA文件的顶部使用它。
  • 切勿使用Integer - 改为使用Long
  • 使用Option Explicit,您必须为每个变量都有Dim个语句。这可以防止因为变量名称中的拼写错误而意外创建新变量。
  • Do循环中,对rownum进行健全性检查,这样您就不会尝试访问不存在的行。
  • 仅指定ToName一次,并保存其值。
  • 使用FileSystemObject.MoveFile重命名。
  • 使用CStr()确保从Cells()获得的值为String。这将减少因意外输入数据而产生令人不快的意外的风险。

This question不完全相同,但也可能有一些有用的信息。