芯友网Xin1234.COM

Excel求助里面的Sub合并文件夹内的工作表



李小.昌宜
求助坛中面的:)
Sub 合并文件夹内的工作表()
Dim str As String
Dim wb As Workbook

str = Dir("C:\Users\Administrator\Desktop\各单位填报数据文件夹\*.xls*")

For i = 1 To 100
    Set wb = Workbooks.Open("C:\Users\Administrator\Desktop\各单位填报数据文件夹\" & str)
    
    wb.Sheets(1).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(
wb.Name, ".")(0)
    
    wb.Close
    str = Dir
    If str = "" Then
       Exit For
    End If
Next
Sheets(1).Select
    Range("A3").Select
End Sub

这段代码合并文件夹内的文件但是为甚么顺序会不对啊
李小.昌宜

实际生成的顺序是这样的
有没有:)知道原因了
砾沙.都成
代码自己写的?
文件夹里都是同一类格式
李小.昌宜
代码是学的视频里面老师的
都是xlsx
之前用六个文件是按照顺序
变成15个顺序就乱了
砾沙.都成
合并后数据对吗
头白雪为
是不是可以先把文件路径输入到单元格中 然后进行排序 再依次导入数据
李小.昌宜
?成都-沙砾 对
?为雪白头 我不太明白
头白雪为
你不是用dir 取得数据嘛  你把每一次取到的路径 先写入单元格中
然后 对单元格进行排序
再把排完序的 单元格数据用循环依次取出   导入表
算是一个折中的办法
李小.昌宜
那不是还要列一行顺序
头白雪为

列完 用vba删了不就行了
nesE.东山
你把每个文件前面的1、2、3一直到9,改成01、02、03试试
李小.昌宜
好的
我来试试看
?山东-Esen 对了顺序对了
但是又来了一个问题
nesE.东山
李小.昌宜
Dim arr()

arr = Array("-执勤支队", "-武汉支队", "-黄石支队", "-十堰支队", "-宜昌支队", "-襄阳支队", "-鄂州支队", "-荆门支队", "-孝感支队")
For i = 2 To 16
     Sheets(1).Copy after:=Sheets(Sheets.Count)
   Sheets(i).Name = i - 1 & arr(i - 2)
Next
End Sub

文件前面的的1  2  3序号是我用这个程序加上去的
没有办法在生成的时候前面有0
nesE.东山
这个就不好办了
李小.昌宜
我直接把序号也固定到里面了
不自动排序了

感觉这个VBA好怪,sheet1后面直接接sheet10
nesE.东山
它程序里是把10当成了1和0两个数字,不是一个数字10
砾沙.都成
文本排序就是如此
李小.昌宜
明白了,他先排的1
Sub 合并()
For i = 2 To Sheets.Count
Sheets(i).Rows("3" & ":" & Sheets(i).Range("A60000").End(xlUp).Row). _
Copy Range("A" & Range("A60000").End(xlUp).Row + 1)
Next
End Sub

大家帮我看看我这个合并数据的代码对吗

为什么当我的合并表出现一个不填的情况,我的总表合并就乱了

变成这样了
出现了两行标题
砾沙.都成
for里面加个if判断即可
李小.昌宜
好的,我自己加了一个if判断了
谢谢您了



我合并之后只能得到这个样子
头白雪为
你在循环里面把循环的条件给改了 是什么操作
李小.昌宜
就是碰到了空表的话  就以A4来控制,如果A4是空的,那么i就加一
就不复制空表了
头白雪为
   你这样子 i本身循环就在+1  然后你又加了1……
比如 第二个表是空的
然后 循环完了i成了3  然后循环开始i就成了4  3就被跳过了……
李小.昌宜
确实理解不是很深,挨着试了半天,这种在表头不合并的情况下好用,但是我们这个表头不行
原来是这样
头白雪为
如果 表是空的 直接结束当次循环开始下次循环就行
李小.昌宜
Sub 合并()
For i = 2 To Sheets.Count
If Sheets(i).Range("a4") = "" Then
i = i + 1
End If
Sheets(i).Rows("4" & ":" & Sheets(i).Range("A60000").End(xlUp).Row). _
Copy Range("A" & Range("A60000").End(xlUp).Row + 1)
Next
End Sub

就直接 end if?
头白雪为
你要把 i=i+1删掉……
然后 下面的应该加个else
虽然我没看懂你下面写的啥
李小.昌宜
哈哈哈,共同学习
头白雪为
then后面直接空着就行  直接加个else就行
李小.昌宜
好的
头白雪为
你后面 是想实现什么功能
李小.昌宜
依次复制下来
头白雪为
._是啥……
李小.昌宜
就是我不是有很多表吗
用这个把他们都合并到总表里面
头白雪为
那你 row+1 改成+2呢
李小.昌宜
还是不行
Sub 合并()
For i = 2 To Sheets.Count
If Sheets(i).Range("a4") <>"" Then
Sheets(i).Rows("4" & ":" & Sheets(i).Range("A60000").End(xlUp).Row). _
Copy sheets()Range("A" & Range("A60000").End(xlUp).Row + 1)
end if
Next
End Sub
头白雪为
哪里不行
方便把数据啥的打包发出来不
光看 也看不出啥东西来
李小.昌宜
稍等
大家好,我是不解風情ご。摩羯座男一枚~

相关问题
------分隔线----------------------------
赞助商链接
赞助商链接
推荐内容