这段VBA代码为何会下标越界?

Sub yidong()
Dim sm As String
sm = Dir(ThisWorkbook.Path & "\*.xlsx")
Do
If InStr(1, sm, "123") = 0 Then
If Not sm Like "汇总.xlsx" Then
Debug.Print sm
Workbooks(ThisWorkbook.Path & "\" & sm).Sheets(1).Copy after:=ThisWorkbook.Sheets(3)
End If
End If
sm = Dir
Loop Until Len(sm) = 0

End Sub
Workbooks(ThisWorkbook.Path & "念慎\" & sm).Sheets(1).Copy after:=ThisWorkbook.Sheets(3)
改为
Workbooks(sm).Sheets(1).Copy after:=ThisWorkbook.Sheets(3)
试试吧枯碧,原来的没高举路径指定好像有问题的啊
Workbooks(ThisWorkbook.Path & "\" & sm).Sheets(1).Copy after:=ThisWorkbook.Sheets(3)
这句必衡腔薯须相应的文档打开后才咐者能圆嫌用,未打开不能用
集合是从0,开始的,把thisworkbook.sheets(2),试试可以吗
第八行:“Workbooks(ThisWorkbook.Path & "\" & sm).Sheets(1).Copy after:=ThisWorkbook.Sheets(3)”里“Workbooks(ThisWorkbook.Path & "\绝孙弊" & sm).”引用错误。“Workbooks("工作薄名")”形式引用必须是已经打开的工作簿,其中的“工作薄名”必须是不带路径的名称,也就是其打开时显示在Excel应用程序顶部标题栏的名称。由于这个引用错误,造成运行时下表越界错误。
第八行代码应改为:“Workbooks( sm).Sheets(1).Copy after:=ThisWorkbook.Sheets(3)”,同时还应在此前添加几行代码:其作用是判断工作薄 sm 是否打开,如没有打开,则打开之后再引用拷贝凯瞎。如果已经是打开的就不能再打开。打开的代码是“Workbooks.Open (ThisWorkbook.Path & "\" & sm)”。拷贝完后再关闭之。 关闭代码应该是“workbooks( sm).close”,而不是“workbooks(ThisWorkbook.Path & "\" & sm).close” 。如果试图关闭一个没打开的工作簿,或引用带路径的工作簿名进行close操作,都会导致下标越界错误并族。