首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >大佬们帮忙看下VBA问题?

大佬们帮忙看下VBA问题?

提问于 2024-03-21 08:54:15
回答 0关注 0查看 40

这是我复制别人打代码,但是执行后提示无效外部过程,请问下是哪个地方写错了吗? VBA

Sub MergeExcelFiles()

Dim MyFolder As String

Dim MyFile As String

Dim TargetWorkbook As Workbook

Dim SourceWorkbook As Workbook

Dim SourceWorksheet As Worksheet

Dim TargetWorksheet As Worksheet

Dim LastRow As Long

Dim Header As Range

Dim FirstRun As Boolean

' 设置包含要合并的Excel文件的文件夹路径

MyFolder = "C:\Users\OP.130160\Desktop\新建文件夹" ' 修改为你的文件夹路径

MyFile = Dir(MyFolder & "*.xlsx*") ' 搜索.xls和.xlsx文件

FirstRun = True

' 创建新的目标工作簿或选择当前工作簿作为目标

' 如果你想要创建新的工作簿,请取消注释下一行并注释掉下面的 Set TargetWorkbook = ThisWorkbook

' Set TargetWorkbook = Workbooks.Add

Set TargetWorkbook = ThisWorkbook

' 在目标工作簿中创建一个新的工作表来存放合并后的数据

Set TargetWorksheet = TargetWorkbook.Sheets.Add

TargetWorksheet.Name = "MergedData"

' 循环遍历文件夹中的所有Excel文件

Application.ScreenUpdating = False ' 关闭屏幕更新以提高性能

Do While MyFile <> ""

' 打开当前文件

Set SourceWorkbook = Workbooks.Open(Filename:=MyFolder & MyFile)

' 设置源工作表为第一个工作表(或根据需要修改)

Set SourceWorksheet = SourceWorkbook.Sheets(1)

' 复制表头(只在第一次运行时)

If FirstRun Then

Set Header = SourceWorksheet.Range("A1:" & SourceWorksheet.Cells(1, Columns.Count).End(xlToLeft).Address)

Header.Copy Destination:=TargetWorksheet.Range("A1")

FirstRun = False

End If

' 找到源工作表的最后一行

LastRow = SourceWorksheet.Cells(SourceWorksheet.Rows.Count, "A").End(xlUp).Row

' 复制除了表头之外的所有数据到目标工作表

SourceWorksheet.Range("A2:" & SourceWorksheet.Cells(LastRow, Columns.Count).End(xlToLeft).Address).Copy _

Destination:=TargetWorksheet.Cells(TargetWorksheet.Rows.Count, "A").End(xlUp).Offset(1, 0)

' 关闭源工作簿,不保存更改

SourceWorkbook.Close SaveChanges:=False

' 获取下一个文件

MyFile = Dir()

Loop

Application.ScreenUpdating = True ' 重新打开屏幕更新

' 可选:自动调整列宽以适应内容

TargetWorksheet.Columns.AutoFit

MsgBox "合并完成!", vbInformation, "合并状态"

End Sub

回答

和开发者交流更多问题细节吧,去?写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com