excel vba请问为什么每次第一次on error goto 都可以到ma,但以后都不可以了?

2024-12-09 04:27:41
推荐回答(2个)
回答1:

这是因为第一次出错后

On Error GoTo ma

将执行ma代码块。


但是ma代码块,执行后,并没有改变myfile变量的值,

而且ma代码块,并没有交待On Error的处理规则,

因此会直接报错,程序直接暂停挂起。


解决办法:

  • 在ma代码块,交待On Error Resume Next 或者 On Error GoTo 其它代码块

  • 在ma代码块,报错后继续处理myfile变量的赋值,即GoTo ba

回答2:

因为你没有使用Resume [Next]返回。

Sub ss()
'……你程序的其他部分
 xpath1 = "D:\lala\"
 xpath2 = "D:\文件\88\"
 Set fso = CreateObject("scripting.filesystemobject")
 Set f = fso.getfolder(xpath2)
 Set fc = f.Files
 myfile = Dir(xpath1 & "*.jpg")
 Do While myfile <> ""
  many = fc.Count
  If Mid(myfile, 1, InStr(myfile, "_") - 1) = "111" Then
   On Error GoTo ma
   fso.movefile xpath1 & myfile, xpath2
   On Error GoTo 0
  End If
  myfile = Dir
 
 Loop
 '……你程序的其他部分
 Exit Sub
 

ma:  Err.Clear
 myfile1 = Left(myfile, Len(myfile) - 4) & many & ".jpg"
 Name (xpath1 & myfile) As (xpath1 & myfile1)
 fso.movefile xpath1 & myfile1, xpath2
 Resume Next
End Sub