看来我的硬盘本身有些问题。它表现得很奇怪。有些文件显示重复,我删除重复项。几分钟后,我刷新目录,然后又回来了。再次刷新,他们走了。文件在一台计算机上可见,但在另一台计算机上我会尝试麻烦拍摄它,看看问题出在哪里。感谢所有帮助到目前为止,可能不止一个问题一起行动。
我已经使用此代码在我的网络驱动器上重命名文件并将文件从一个位置移动到另一个位置。
视频文件名为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
由于代码不会创建ToName存在的错误消息,因此它不是&#34;重复的&#34;问题。
如果我运行以下代码
If objFSO.FileExists(ActiveWorkbook.Path + "\" + Cells(r, "A")) Then
MsgBox "test"
End If
我收到消息框,这意味着FromName文件存在。
因此,简而言之,文件存在并且它将成为不存在的文件名。路径(目录)也存在,因为它们是在早期的sub()中创建的。我仔细检查过它。那么问题是什么呢? 我完全迷失在这里。
答案 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不完全相同,但也可能有一些有用的信息。