vba遍历excel文件|如何使用VBA遍历文件夹及其子文件夹中的所有excel并打开后进行修改

vba遍历excel文件|如何使用VBA遍历文件夹及其子文件夹中的所有excel并打开后进行修改的第1张示图

A. excel vba遍历某文件下所有excel表,(表格内容一样,数据不同),并计算所有表格中指定同一单元格的和。

首先要打开你需要的数个文件,而每个文件假设在VBA所在工作簿的 A列,从A1开始,并且文件名排列下去,中间没有空白单元格,直到空白的单元格结束。需要求和的是每个文件内的shee1的A2单元格,最后合计数在程序所在文件的b1单元格public sub 遍历()dim i as integerdim sumnumber as longdim filename as stringi = 1do until cells(i,1)=“”cells(i,1) = filenameworkboos.open filename: = filenameWindows(filename).Activatesumnumber = sumnumber + sheets("sheet1").range("a2")activewindows.closei = i+1loopsumnumber = range("b1")end sub

B. Excel VBA怎样实现整行/列的遍历

编程如下:

Sub aa()Dim i, jj = UsedRange.Rows.CountFor i = 1 To UsedRange.Rows.CountIf Cells(i, 1) = "某个记录" ThenRange(Cells(i, 1), Cells(j, 1)).EntireRow.SelectExit SubEnd IfNextEnd Sub

C. vba读取excel遍历文件指定数据

Excel文件格式一致,汇总求和,其他需求自行变通容汇总使用了字典Public dSub 按钮1_Click()Application.ScreenUpdating = FalseActiveSheet.UsedRange.ClearContentsCells(1, 1) = "编号"Cells(1, 2) = "数量"Set d = CreateObject("scripting.dictionary")Getfd (ThisWorkbook.Path) 'ThisWorkbook.Path是当前代码文件所在路径,路径名可以根据需求修改Application.ScreenUpdating = TrueIf d.Count > 0 ThenThisWorkbook.Sheets(1).[a2].Resize(d.Count) = WorksheetFunction.Transpose(d.keys)ThisWorkbook.Sheets(1).[b2].Resize(d.Count) = WorksheetFunction.Transpose(d.items)End IfEnd SubSub Getfd(ByVal pth)Set Fso = CreateObject("scripting.filesystemobject")Set ff = Fso.getfolder(pth)For Each f In ff.FilesRem 具体提取哪类文件,还是需要根据文件扩展名进行处理If InStr(Split(f.Name, ".")(UBound(Split(f.Name, "."))), "xl") > 0 ThenIf f.Name <> ThisWorkbook.Name ThenSet wb = Workbooks.Open(f)For Each sht In wb.SheetsIf WorksheetFunction.CountA(sht.UsedRange) > 1 Thenarr = sht.UsedRangeFor j = 2 To UBound(arr)d(arr(j, 1)) = d(arr(j, 1)) + arr(j, 2)Next jEnd IfNext shtwb.Close FalseEnd IfEnd IfNext fFor Each fd In ff.subfoldersGetfd (fd)Next fdEnd Sub

D. VBA编程,遍历文件夹下的excel表,对每个excel表遍历做一些操作

(一)FileSystemObject对象模型包含了下面的对象和集合:

·FileSystemObject主对象,包含用来创建、删除和获得有关信息,以及用来操作驱动器、文件夹和文件的方法和属性。

·Drive 对象,包含用来获得信息的方法和属性,这些信息是关于连接在系统上的驱动器的,如有多少可用空间等。驱动器不一定是硬盘,也可以是CD-ROM、U盘甚至是通过网络在逻辑上连接的硬盘(如公司里部门共享的服务器网络硬盘)。

·Drives 集合,提供驱动器的列表,这些驱动器以实物或在逻辑上与系统相连接。Drives集合包括所有驱动器,与类型无关。

·File 对象,包含用来创建、删除或移动文件的方法和属性。

·Files 集合,提供包含在文件夹内的所有文件的列表。

·Folder 对象,包含用来创建、删除或移动文件夹的方法和属性。

·Folders 集合,提供包含在文件夹内的所有文件夹的列表。

·TextStream 对象,用来读写文本文件。

(二)FileSystemObject对象的方法

FileSystemObject对象模型中有些功能是重复的,如可用FileSystemObject对象的CpoyFile方法,也可用File对象的Copy方法来复制文件。下面先介绍FileSystemObject对象的方法。

1、GetDrive 方法

语法:object.GetDrive drivespec

drivespec参数可以是一个驱动器字符(c)、一个驱动器字符加一个冒号(c:)、一个驱动器字符加冒号和路径分隔符(c:)或任何网络共享的说明(file://computer2/share1)。

作用:返回一个与指定路径中的驱动器相对应的 Drive 对象。

示例:

Dim dSet d = fso.GetDrive("D:") '变量d就代表了驱动器D对象

如果 drivespec 不符合任何一种可以接受的形式或者不存在,则发生一个错误。

注意:为简洁,示例中都假定fso是已经创建的FileSystemObject对象

2、GetDriveName 方法

语法:object.GetDriveName(path)

作用:返回一个包含指定路径的驱动器名字的字符串。

示例:

Debug.Print fso.GetDriveName("c:est.txt") '立即窗口显示"c:"

3、GetExtensionName 方法

语法:object.GetExtensionName(path)

作用:返回一个包含路径中最后部件扩展名的字符串。

示例:

Debug.Print fso.GetExtensionName("c:est.txt") '立即窗口显示"txt"

4、GetBaseName 方法

语法:object.GetBaseName(path)

作用:返回一个包含路径中最后部件的基本名字(去掉任何文件扩展名)的字符串。

示例:

Debug.Print fso.GetBaseName("c:abcest.txt") '立即窗口显示"test"

5、GetAbsolutePathName 方法

语法:object.GetAbsolutePathName(pathspec)

作用:从提供的路径说明中返回一个完整、明确的路径。

示例:如果pathspec为空字符串"",则返回当前路径。假设当前路径为C:Documents and SettingsycMy Documents

Debug.Print fs.GetAbsolutePathName("") '显示C:Documents and SettingsycMy DocumentsDebug.Print fs.GetAbsolutePathName("c:..") '显示C:Documents and Settingsyc,即上层目录Debug.Print fs.GetAbsolutePathName("abc") '显示C:Documents and SettingsycMy DocumentsabcDebug.Print fs.GetAbsolutePathName("c:est.txt") '显示C:est.txt

6、GetFile 方法

语法:object.GetFile(filespec)

作用:返回一个和指定路径中文件相对应的 File 对象。

示例:

Dim fSet f = fso.GetFile("c:est.txt") '变量f就代表了文件test.txt对象

注意:如果指定的文件不存在,则发生一个错误。

7、GetFileName 方法

语法:object.GetFileName(pathspec)

作用:返回指定路径中的最后部件,该路径不是驱动器说明的一部分。

示例:

Debug.Print fso.GetFileName("c:abcest.txt") '立即窗口显示"test.txt"

8、GetFolder 方法

语法:object.GetFolder(folderspec)

作用:返回一个和指定路径中文件夹相对应的 Folder 对象。

示例:

Dim fdSet fd = fso.GetFolder("c:windows") '变量f就代表了文件夹windows对象

注意:如果指定的文件夹不存在,则发生一个错误。

9、GetSpecialFolder 方法

语法:object.GetSpecialFolder(folderspec)

作用:返回指定的特殊文件夹。

说明:folderspec 参数可为任何的下列值:

WindowsFolder 0 Windows 文件夹,包含由 Windows 操作系统安装的文件。 SystemFolder 1 系统文件夹,包含库、字体、设备驱动程序。 TemporaryFolder 2 Temp 文件夹,用于存储临时文件。它的路径在 TMP 环境变量中。

10、GetParentFolderName 方法

语法:object.GetParentFolderName(path)

作用:返回一个包含指定路径最后部件父文件夹名字的字符串。

示例:

Debug.Print fso.GetParentFolderName("c:mpest.txt") '显示"c:mp"

11、GetTempName 方法

语法:object.GetTempName

作用:返回一个随机产生的临时文件或文件夹的名字,该名字在执行需要临时文件或文件夹的操作时有用。

说明:GetTempName 方法不产生一个文件,它仅提供一个临时文件名字,该名字可被 CreateTextFile 用于创建一个文件。

示例:

Debug.Print fso.GetTempName '显示"radB0208.tmp",每次都会变。

12、BuildPath 方法

语法:object.BuildPath(path, name)

作用:追加一个名字到一个已经存在的路径。

示例:

Debug.Print fso.BuildPath("c:mp", "abc") '显示"c:mpabc"

13、CreateFolder 方法

语法:object.CreateFolder(foldername)

作用:创建一个文件夹。

注意:如果指定的文件夹已经存在,则发生一个错误。

示例:

fso.CreateFolder("c:myfolder") '在C盘创建一个myfolder文件夹

14、CopyFolder 方法

语法:object.CopyFolder source, destination[, overwrite]

source 必需的。指明一个或多个被复制文件夹的字符串文件夹说明,可以包括通配符。 destination 必需的。指明 source 中被复制文件夹和子文件夹的接受端的字符串,不允许有通配符。 overwrite 可选的。Boolean 值,它表示已存在的文件夹是否被覆盖。如果为 True,文件被覆盖。 如果为 False,文件不被覆盖。缺省值为 True。

作用:复制一个文件夹到另一个地方。

15、MoveFolder 方法

语法:object.MoveFolder source, destination

参数与CopyFolder的前两个一样。

作用:将一个或多个文件夹从一个地方移动到另一个地方。

16、DeleteFolder 方法

语法:object.DeleteFolder folderspec[, force]

folderspec 必需的。要删除的文件夹的名字。 Folderspec 可以在最后的路径部件中包含通配符。 force 可选的。Boolean 值,如果要删除具有只读属性设置的文件夹,其值为 True, 如果值为 False (缺省),则不能删除具有只读属性设置的文件夹。

作用:删除一个指定的文件夹和它的内容。

说明:如果没有发现相匹配的文件夹,则发生一个错误。DeleteFolder 方法停止在它遇到的第一个错误上,不要尝试回卷或撤消错误发生前所做的任何改变。

示例:

fso.DeleteFolder("c:mp")

17、FolderExists 方法

语法:object.FolderExists(folderspec)

作用:如果指定的文件夹存在返回 True,不存在返回 False。

18、DriveExists 方法

语法:object.DriveExists(drivespec)

作用:如果指定的驱动器存在,返回 True,如果不存在返回 False。

19、FileExists 方法

语法:object.FileExists(filespec)

作用:如果指定的文件存在,返回 True,若不存在,则返回 False。

20、CreateTextFile 方法

语法:object.CreateTextFile(filename[, overwrite[, unicode]])

overwrite 可选的。Boolean 值,表示一个已存在文件是否可被覆盖。如果可被覆盖其值为 True, 其值为 False 时不能覆盖。如果它被省略,则已存在文件不能覆盖。unicode 可选的。Boolean 值,表示文件是作为一个 Unicode 文件创建的还是作为一个ASCII 文件创建的。 如果作为一个 Unicode 文件创建,其值为 True,作为一个 ASCII 文件创建, 其值为 False。如果省略的话,则认为是一个 ASCII 文件。

作用:创建一个指定的文件名并且返回一个用于该文件读写的 TextStream 对象。

示例:

Dim fSet f = fso.CreateTextFile("c:estfile.txt", True)

21、OpenTextFile 方法

语法:object.OpenTextFile(filename[, iomode[, create[, format]]])

作用:打开一个指定的文件并返回一个 TextStream 对象,该对象可用于对文件进行读、写、追加操作。

说明:·iomode 参数可为下面设置值中的任何值:

ForReading 1 打开一个只读文件,不能对此文件进行写操作。 ForWriting 2 打开一个用于写操作的文件。如果和此文件同名的文件已存在,则覆盖以前内容。 ForAppending8 打开一个文件并写到文件的尾部。

注意:在VBA帮助里是没有ForWriting的,其实是有的,VBA帮助也是有错误的。另外,这些常数在使用前要先声明,或者直接用数值。

·create可选的,它表示如果指定的 filename 不存在是否可以创建一个新文件。如果创建新文件,其值为 True。若不创建文件其值为 False。缺省值为 False。

·Format参数可为下面设置值中的任何值:

TristateUseDefault –2 使用系统缺省打开文件。 TristateTrue –1 以 Unicode 格式打开文件。 TristateFalse 0 以 ASCII 格式打开文件。

示例:

Dim fSet f = fso.OpenTextFile("c:estfile.txt", 2, True)

或者:

Const ForWriting = 2Set f = fso.OpenTextFile("c:estfile.txt", ForWriting, True)

这两者功能是一样的,一个声明了常量,一个直接用数值。都是在C盘创建文件testfile.txt(如不存在),或以写的方式打开(如存在)。

22、CopyFile 方法

语法:object.CopyFile source, destination[, overwrite]

作用:把一个或多个文件从一个地方复制到另一个地方。

说明:需要注意的地方与CopyFolder是完全类似的。

示例:

fso.file "c:estfile.txt", "f:abc" '若abc不存在则出错。fso.file "c:estfile.txt", "f:abc" '若abc不存在则复制testfile.txt到F盘文件名变为abc,若abc存在,出错,因为是一个目录。

23、MoveFile 方法

语法:object.MoveFile source, destination

作用:将一个或多个文件从一个地方移动到另一个地方。

说明:需要注意的地方与MoveFolder是完全类似的。

24、DeleteFile 方法

语法:object.DeleteFile filespec[, force]

作用:删除一个指定的文件。

说明:force 可选的。如果要删除具有只读属性设置的文件,其值为 True。如果其值为 False (缺省),则不能删除具有只读属性设置的文件。

(三)处理文件夹

1、获取文件夹的信息

可以利用Folder对象来获取有关文件夹的信息,Folder对象的属性有:

Attributes 属性 文件夹的属性。可为下列值中的任意一个或任意的逻辑组合: Normal 0 一般文件。未设置属性。 ReadOnly 1 只读文件。属性为读/写。 Hidden 2 隐藏文件。属性为读/写。 System 4 系统文件。属性为读/写。 Volume 8 磁盘驱动器卷标。属性为只读。 Directory 16 文件夹或目录。属性为只读。 Archive 32 自上次备份后已经改变的文件。属性为读/写。 Alias 64 链接或快捷方式。属性为只读。 Compressed 128 压缩文件。属性为只读。 Name 属性 文件夹名字。ShortName 属性 较早的 8.3 命名约定的程序所使用的短名字。Type 属性 文件夹类型。Files 属性 所有 File 对象组成的 Files 集合,这些 File 对象包含在指定的文件夹中 ──包括设置了隐藏和系统文件属性的那些文件。Drive 属性 文件夹所在的驱动器符号。IsRootFolder 属性 文件夹是否是根文件夹。ParentFolder 属性 文件夹的父文件夹对象。SubFolders 属性 文件夹的子文件夹集合。Path 属性 文件夹的路径。ShortPath 属性 较早的 8.3 文件命名约定的程序所使用的短路径。Size 属性 文件夹的大小,以字节为单位。DateCreated 属性 文件夹的创建日期和时间。DateLastModified 属性 最后一次修改文件夹的日期和时间。DateLastAccessed 属性 最后一次访问文件夹的日期和时间。

属性的使用和Drive对象是一样的,可以用GetFolder获取一个Folder对象,也可以用FileSystemObject对象的CreateFolder 方法创建一个Folder对象。

2、Folder对象的方法

⑴Copy 方法

语法:object.Copy destination[, overwrite]

作用:把一个指定的文件夹从一个地方复制到另一个地方。

说明:Copy 方法的作用与FileSystemObject对象的CopyFolder 方法是一样的,不同在于后者可一次复制多个文件夹。

⑵Move 方法

语法:object.Move destination

作用:将一个指定的文件夹从一个地方移动到另一个地方。

说明:Move 方法的作用与FileSystemObject.MoveFolder 是一样的。不同在于后者可一次移动多个文件夹。

⑶Delete 方法

语法:object.Delete force

作用:删除一个指定的文件夹。

说明:Delete 方法的作用与FileSystemObject.DeleteFolder 是一样的。

⑷CreateTextFile 方法

语法:object.CreateTextFile(filename[, overwrite[, unicode]])

作用:与FileSystemObject对象的CreateTextFile 方法是一样的。

示例:

Setfd=fs.getfolder("c:mp")Setf=fd.CreateTextFile("testfile.txt",True)

可在C盘tmp文件夹下创建testfile.txt文件。

(四)处理文件

1、获取文件的信息

可以利用File对象来获取有关文件的信息,File对象的属性和Folder的属性是完全一样的,只是少了Files 属性、IsRootFolder 属性、SubFolders 属性这3个属性。这里就不列了。

2、File对象的方法

⑴Copy 方法

⑵Move 方法

⑶Delete 方法

以上三种方法与Folder的是完全类似的,语法也一样,同样也可用FileSystemObject对象相应的方法代替。

⑷OpenAsTextStream 方法

语法:object.OpenAsTextStream([iomode, [format]])

作用:打开一个指定的文件并返回一个 TextStream 对象,该对象可用来对文件进行读、写、追加操作。

说明:此方法与FileSystemObject对象的 OpenTextFile 方法相同的功能。参数也是一致的。

总结

从上面的介绍,我们看到使用FileSystemObject对象处理文件、文件夹比使用VBA语句的方法具有更容易存在的特点。这是因为FileSystemObject对象使用了面向对象的语法。另外FileSystemObject对象处理文本文件毫不逊色于VBA语句,非常值得推荐。唯一的问题是不能处理二进制文件,微软在有关文档中称计划将来支持二进制文件,不过应该只是计划而已。

通过介绍完FileSystemObject的知识,可参考以下代码是通过FileSystemObject对象模型遍历指定文件夹,然后打开该文件和另外的excel,实现两个excel的数据之间操作。

SubTest()Application.DisplayAlerts=False'禁止信息提示Application.ScreenUpdating=False'禁止屏幕刷新mypath=Sheets(1).Range("B2").Value'文件夹路径ForEachDeleFileInCreateObject("scripting.filesystemobject").getfolder(Sheets(1).Range("B3").Value).Files'遍历文件夹下的所有文件DeleFile.Delete'删除每遍历一次的文件NextForEachmyfileInCreateObject("scripting.FileSystemObject").getfolder(mypath).Files'遍历文件夹下的所有文件Ifmyfile.NameLike"*.xlsx*"Then'筛选excel文件Filename=Mid(myfile.Name,1,(InStr(myfile.Name,"_")-1))'获取文件名WithWorkbooks.Open(Op.Range("B1").Value&""&Op.Range("C1").Value)'打开另一个excel文件为ASetwb=Workbooks(Op.Range("C1").Value).Worksheets(1)'设置A的workbook为wbWithGetObject(myfile)'打开当前遍历的excel文件为Bwb.Range("A1").Value=.Sheets(1).Range("C1").Value'将B的C1单元格值赋给A的A1单元格.Close'关闭BEndWith.SaveAsFilename:=Op.Range("B3")&""&Filename&".xlsx",_FileFormat:=xlOpenXMLWorkbook,CreateBackup:=False'另存为excel文件.CloseFalse'关闭AEndWithEndIfNextApplication.DisplayAlerts=True'恢复信息提示Application.ScreenUpdating=True'恢复屏幕刷新EndSub

E. 用VBA编程如何遍历EXCEL每一个工作表

这段小程序就把一个EXCEL文件中每个工作表的A1单元格填上了aSubtt()Fori=1ToActiveWorkbook.Worksheets.CountActiveWorkbook.Worksheets(i).Cells(1,1).Value="a"NextEndSub

F. 如何使用VBA调用EXCEL里面的图片和数据生成PPT里面的图片和数据

本次案例来自网友提问:需要从600个Excel文件中导出每个文件中的2个图片,之前由于时间原因,回复比较简单没有给出具体实现方法,今天花时间整理写成图文,希望小伙伴们都可以学会。一、 数据模拟为了更加真实的还原提问者遇到的问题,我们需要准备600个且都包含有2个图片的Excel文件。一两个文件我们可以手动新建就可以了,这可是600个文件呐!别担心,既然我们是用VBA来解决问题,解决这种事情重复机械的劳动,当然不是什么难事。图片我们用以下两个代替,放到当前文件目录下,分别命名为test1.png和test2.png,模拟数据时将test1.png插入到第一个表,test2.png插入到第二个工作表。test1.pngtest2.png分步操作过程:第一步:新建一个Excel文件,将它另存为.xlsm格式。启用宏工作簿第二步:打开新建好的.xlsm文件,按快捷键ALT+F11进入VBE界面。进入VBE界面第三步:在VBE工程种插入一个模块。插入模块第四步:在刚刚新建的模块中粘贴以下代码。Sub 生成600个含图片的Excel文件()'关闭刷新,防止屏幕抖动Application.ScreenUpdating = False'定义变量iDim i As Integer'定义i从1循环到600For i = 1 To 600'新增一个工作簿Workbooks.Add'往工作簿的第一个工作表中插入图片test1.pngActiveWorkbook.Sheets(1).Pictures.Insert(ThisWorkbook.Path & "\test1.png").Select'往工作簿的第二个工作表中插入图片test2.pngActiveWorkbook.Sheets(2).Pictures.Insert(ThisWorkbook.Path & "\test2.png").Select'将工作簿存储到当前路径下ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & i & ".xlsx"'关闭工作簿ActiveWorkbook.Close'继续循环新建其他工作簿Next'恢复屏幕刷新Application.ScreenUpdating = True'处理完成给出提示MsgBox "600个含图片的Excel文件生成完成!", vbInformation, "提示信息"End Sub第五步:执行VBA代码,生成我们需要的600个Excel文件。执行VBA代码连贯操作演示:操作演示二、 图片导出600个案例文件已经准备好了,接下来就是导出文件中的图片。解决思路:1. 一个个的找出当前目录下的所有Excel文件。2. 打开找到的Excel文件。3. 一个个的找出Excel文件中的工作表。4. 找出工作表中的所有图片对象。5. 把找到的每一个图片导出到当前目录下。如果文件不多的情况下,按上面的思路手动操作导出也是可以的,其实通过VBA来解决问题也是要先把复杂问题进行简单化,一步步进行分解问题,最终形成完整解决方案。VBA代码使用方式在上面数据准备过程中已经有详细描述了,本次我们直接来运行下代码,实现导出文件中的图片。Sub 导出当前路径下工作簿中的图片()Dim wk$ '定义为工作簿文件Dim i As Integer '定义工作簿中的工作表数量Dim ii As Integer '定义为工作表中的对象个数'关闭刷新,防止抖动Application.ScreenUpdating = False'遍历第一个工作簿文件wk = Dir(ThisWorkbook.Path & "\*.xlsx")'遍历到的文件名不等于空的情况下Do While wk <> ""'如果文件名称和当前的名称是不一样的。If wk <> ThisWorkbook.Name Then'打开遍历到的工作簿Workbooks.Open (ThisWorkbook.Path & "\" & wk)'对打开的工作簿文件进行以下操作With ActiveWorkbook'循环出工作簿中的每一个工作表For i = 1 To .Sheets.Count'循环出工作表中的每一个对象shapeFor ii = 1 To .Sheets(i).Shapes.Count'临时变量,统计shape的个数k = k + 1'复制shape对象.Sheets(i).Shapes(ii).Copy'创建一个图表对象,宽高与与对象保持一致With .Sheets(i).ChartObjects.Add(0, 0, .Sheets(i).Shapes(ii).Width, .Sheets(i).Shapes(ii).Height).Chart'把图片插入进去.Paste'通过图表对象的导出方法,把图片导出到当前目录下.Export ThisWorkbook.Path & "\" & wk & "_" & k & ".png"'删除图表.Parent.DeleteEnd WithNextNext'关闭打开的工作簿.Close FalseEnd WithEnd If'继续遍历下一个工作簿wk = DirLoop'开启屏幕刷新Application.ScreenUpdating = TrueEnd Sub图片导出演示

G. 大神《同一文件夹使用VBA遍历所有excel表格并引用数据》 能否提供下实现的方法和步骤 教育用 感谢

用dir 和do loop 遍历同一文件夹下的excel文件,在for next 循环中open 打开excel文件,for each next 循环工作簿中的工作表, usedrange.select 选择使用区域,selection. 复制,activesheet.paste粘贴。

H. 如何用VBA遍历指定目录下的所有子文件夹Excel文件的所有工作表

vba麻烦点,dir最快,excelhome论坛上有大量现成代码:

SubOpiona()'//函数实例FileArr=FileAllArr(ThisWorkbook.Path,"*.xls",ThisWorkbook.Name,False)Fori=0ToUBound(FileArr)MsgBoxFileArr(i)'SetWB=Workbooks.Open(FileArr(I))'//打开工作簿'你的代码'WB.Closetrue'//保存NextEndSub'*******************************************************************************************************'功能:查找指定文件夹含子文件夹内所有文件名或文件夹名(含路径)'函数名:FileAllArr'参数1:Filename需查找的文件夹名不含最后的""'参数2:FileFilter需要过滤的文件名,可省略,默认为:[*.*]'参数3:Liwai剔除例外的文件名,可省略,默认为:空,一般为:ThisWorkbook.Name'参数4:Files是否只要文件夹名,可省略,默认为:FALSE'返回值:一个字符型的数组'使用方法:FileArr=FileAllArr(ThisWorkbook.Path,"*.xls",ThisWorkbook.Name,false)'作者:北极狐工作室QQ:14885553'*******************************************************************************************************PublicFunctionFileAllArr(ByValFilenameAsString,="*.*",OptionalByValLiwaiAsString="",OptionalByValFilesAsBoolean=False)AsString()SetDic=CreateObject("Scripting.Dictionary")'创建一个字典对象SetDid=CreateObject("Scripting.Dictionary")Dic.Add(Filename&""),""i=0DoWhilei<Dic.CountKe=Dic.keys'开始遍历字典MyName=Dir(Ke(i),vbDirectory)'查找目录DoWhileMyName<>""IfMyName<>"."AndMyName<>".."ThenIf(GetAttr(Ke(i)&MyName)AndvbDirectory)=vbDirectoryThen'如果是次级目录Dic.Add(Ke(i)&MyName&""),""'就往字典中添加这个次级目录名作为一个条目EndIfEndIfMyName=Dir'继续遍历寻找Loopi=i+1LoopDimarrx()AsStringi=0IfFiles=TrueThen'//是否只输出文件夹名ForEachKeInDic.keys'以查找总表所在文件夹下所有excel文件为例ReDimPreservearrx(i)IfKe<>Filename&""Then'//自身文件夹除外arrx(i)=Kei=i+1EndIfNextFileAllArr=arrxElseForEachKeInDic.keys'以查找总表所在文件夹下所有excel文件为例MyFileName=Dir(Ke&FileFilter)'过滤器:EXCEL2003为:*.xls,excel2007为:*.xlsxDoWhileMyFileName<>""IfMyFileName<>LiwaiThen'排除例外文件ReDimPreservearrx(i)arrx(i)=Ke&MyFileNamei=i+1EndIfMyFileName=DirLoopNextFileAllArr=arrxEndIfEndFunction'****************************************************************

I. 如何使用VBA遍历文件夹及其子文件夹中的所有excel,并打开后进行修改

把 .Filename = “C:\Users\Desktop\c.png"换成 .Filename ="C:\Users\Desktop\c.png"试试,=号后面的双引号不是英文字符

J. 同一文件夹使用VBA遍历所有excel表格并引用数据

亲,由于很多信息都很含糊,所以没法写完整的代码,只能给个雏形,您自己修改了。

Sub遍历()Setfso=CreateObject("scripting.filesystemobject")Setff=fso.getfolder("这里改成你的指导文件夹路径")ForEachfInff.FilesIff.Name<>ThisWorkbook.NameAndLeft(f.Name,2)<>"~$"ThenSetwb=Workbooks.Open(f)Workbooks(f).Sheets(1).ActivateMsgBox"把本句换成:取对应excel指定位置的数据给目标excel指定工作薄指定位置"wb.CloseFalseEndIfNextfEndSub

未经允许不得转载:山九号 » vba遍历excel文件|如何使用VBA遍历文件夹及其子文件夹中的所有excel并打开后进行修改

赞 (0)