我目前有这段代码,它将从一个文件夹中获取文件,每个文件一个打开,将其名称打印到我的“主文件”的第一栏中,然后关闭它并以这种方式遍历整个文件夹。
在打开的每个文件中,单元格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
objFile.Activate
是你的问题。
objFile
不是工作簿变量,而是从中分配了路径\文件名objFolder.Files
。
使用以下内容:
Dim NewWorkbook as Workbook
set NewWorkbook = Workbooks.Open Filename:=MyFolder & objFile.Name
.
.
.
NewWorkbook.Activate
ActiveWorkbook.Close
现在,而不是最后两行,因为您有一个引用打开的工作簿的变量,所以您可以用以下一行替换这两行:
NewWorkbook.Close
阅读此链接,以获取有关其他消除Activate
,等方法的良好建议Select
,以使您的代码更干净,更具可读性,并且由于将焦点集中在错误的地方并且易于维护,因此更不会出现错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句