我目前有这个代码,它将从文件夹中获取文件,每个文件打开一个,将其名称打印到我的“主文件”的第一列,然后关闭它,然后循环遍历整个文件夹。
在每个打开的文件中,单元格J1中有信息要复制并粘贴到我的“主文件”的第3列。代码部分当前返回错误(对象不支持此属性或方法但我无法分辨它指的是哪一行)并导致程序在仅打开一个文件后停止。
有什么想法吗?
完整代码:
Sub LoopThroughDirectory()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim MyFolder As String
Dim Sht As Worksheet
Dim i As Integer
MyFolder = "C:\Users\trembos\Documents\TDS\progress\"
Set Sht = ActiveSheet
'create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
'get the folder object
Set objFolder = objFSO.GetFolder(MyFolder)
i = 1
'loop through directory file and print names
For Each objFile In objFolder.Files
If LCase(Right(objFile.Name, 3)) <> "xls" And LCase(Left(Right(objFile.Name, 4), 3)) <> "xls" Then
Else
'print file name
Sht.Cells(i + 1, 1) = objFile.Name
i = i + 1
Workbooks.Open Filename:=MyFolder & objFile.Name
End If
'Get TDS name of open file
Range("J1").Select
Selection.Copy
Windows("masterfile.xlsm").Activate
Range("C2").Select
ActiveSheet.Paste
objFile.Activate
ActiveWorkbook.Close
Next objFile
End Sub
破坏程序的部分代码:
'Get TDS name of open file
Range("J1").Select
Selection.Copy
Windows("masterfile.xlsm").Activate
Range("C2").Select
ActiveSheet.Paste
objFile.Activate
答案 0 :(得分:1)
objFile.Activate
是你的问题。
objFile
不是工作簿变量,它是从objFolder.Files
分配路径\文件名。
使用以下内容:
Dim NewWorkbook as Workbook
set NewWorkbook = Workbooks.Open Filename:=MyFolder & objFile.Name
.
.
.
NewWorkbook.Activate
ActiveWorkbook.Close
现在,由于您有一个引用已打开工作簿的变量,而不是最后两行,您可以用这一行替换这两行:
NewWorkbook.Close
阅读this link以获取有关消除Activate
,Select
等其他方法的一些好建议,以使您的代码更清晰,更易读,更不容易因错误的地方而出错有重点,更容易维护。
答案 1 :(得分:0)
我认为问题是由于不合格的引用。具体来说,我不确定您是否可以将选择从非活动工作表粘贴到新活动工作表,但我不确定因为我避免使用.Select和.Activate所以我没有问题。
尝试用以下方法替换有问题的部分:
Sht.Range("J1").Copy Workbooks("masterfile.xlsm").Sheets(1).Cells(2,3)
objFile.Activate