Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5656|回复: 24

[已解决]求助将另外工作薄所有工作表数据导入的VBA代码修改

[复制链接]
发表于 2017-8-19 13:47 | 显示全部楼层 |阅读模式
本帖最后由 网络人 于 2017-8-23 13:59 编辑

求助将工作薄1内所有工作表的数据按照对应的名称导入到工作薄2内,具体见附件
最佳答案
2017-8-23 12:03
  1. Private Sub CommandButton1_Click()
  2. Application.ScreenUpdating = False
  3. Application.DisplayAlerts = False
  4. Dim WB As Workbook, MySh As Worksheet, sh As Worksheet
  5. Dim F, E
  6. Dim arr, i&, Lastrow&, Xh&
  7. Set MySh = ActiveWorkbook.Worksheets("sheet1") '为了确定用那个工作簿里的工作表,直接set下
  8. MySh.Range("4:65536").Clear '删除原来的数据,若要接下去,就不用此句
  9. F = False
  10. For Each E In Workbooks
  11.     If E.Name = "工作簿1.xls" Then
  12.         F = True
  13.         If MsgBox("请关闭当前操作界面中已经打开的【工作簿1】后再操作!", 32 + 256) = 6 Then
  14.             Exit Sub
  15.         End If
  16.     End If
  17. Next
  18. If F = False Then
  19.     Set fso = CreateObject("scripting.filesystemobject")
  20.     Set fld = CreateObject("Shell.Application").BrowseForFolder(0, "请选择文件夹", 0, 0)
  21.     If fld Is Nothing Then End
  22.     fp = fld.Self.Path
  23.     Workbooks.Open Filename:=fp & "" & "工作簿1.xls"  '读入
  24.     Set WB = ActiveWorkbook
  25.      On Error Resume Next
  26.     For Each sh In WB.Worksheets
  27.            arr = sh.Range("a2:i" & sh.Cells(Rows.Count, 1).End(xlUp).Row)
  28.            Lastrow = IIf(Lastrow < 3, 3, MySh.Cells(MySh.Rows.Count, 5).End(3).Row)     '由于mysh表格2,3行是合并的,所以加个判断
  29.            n = Lastrow '其实可以省略n,xh用一个参数就可以了,为了好理解就多加几个参数
  30.                 For i = 2 To UBound(arr)
  31.                      n = n + 1 '开始写入行号
  32.                      Xh = Xh + 1 '序号
  33.                     With MySh
  34.                        .Cells(n, 1) = Xh
  35.                        .Cells(n, 2) = sh.Name & "," & arr(i, 1) '备注加工作表名称加此序号,好查看
  36.                        .Cells(n, 4) = arr(i, 2)
  37.                        .Cells(n, 5) = arr(i, 3)
  38.                        .Cells(n, 6) = arr(i, 4)
  39.                        .Cells(n, 7) = arr(i, 5)
  40.                        .Cells(n, 10) = arr(i, 6)
  41.                        .Cells(n, 11) = arr(i, 7)
  42.                        .Cells(n, 12) = arr(i, 8)
  43.                        .Cells(n, 19) = arr(i, 9)
  44.                     End With
  45.                 Next i
  46.         Next sh
  47.        WB.Close savechanges:=False
  48.       Set WB = Nothing: Set MySh = Nothing: Erase arr
  49. End If
  50. Application.ScreenUpdating = True
  51. Application.DisplayAlerts = True
  52. End Sub
复制代码

新建文件夹.rar

17.09 KB, 下载次数: 18

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-8-19 21:17 | 显示全部楼层
本帖最后由 idnoidno 于 2017-8-19 21:21 编辑

代碼是在工作簿1中新增一個工作表(TA)另2個工作表我改名為T、G,代碼執行是可以的,您試試
回复

使用道具 举报

发表于 2017-8-19 21:21 | 显示全部楼层
  1. Option Explicit
  2. Sub t1()
  3. Dim ar, br, arow%, brow%, i%, j%, m%
  4. With Worksheets("T")
  5.     arow = .Range("a65536").End(xlUp).Row
  6. End With
  7. With Worksheets("G")
  8.     brow = .Range("a65536").End(xlUp).Row
  9. End With
  10. ReDim br(1 To arow + brow + m, 1 To 12)
  11. For i = 1 To Worksheets.Count - 1
  12.     With Worksheets(i)
  13.        ar = .Range("a3:i" & .Cells(Rows.Count, 1).End(xlUp).Row)
  14.     End With
  15.     For j = 1 To UBound(ar)
  16.         m = m + 1
  17.         br(m, 1) = m
  18.         br(m, 4) = ar(j, 2)
  19.         br(m, 5) = ar(j, 3)
  20.         br(m, 6) = ar(j, 4)
  21.         br(m, 7) = ar(j, 5)
  22.         br(m, 10) = ar(j, 6)
  23.         br(m, 11) = ar(j, 7)
  24.         br(m, 12) = ar(j, 8)
  25.     Next j
  26. Next i
  27. With Worksheets("TA")
  28.     .Range("a3:l3") = Array("序号", "订单备注", "省份", "加盟店", "订单号.", "柜体材料", "門板材料", "门板材料", "", "客戶", "联系电话", "地址")
  29.     .Range("a4").Resize(UBound(br, 1), UBound(br, 2)) = br
  30. End With
  31. End Sub
复制代码
回复

使用道具 举报

发表于 2017-8-19 21:23 | 显示全部楼层
很不好意思,因為系統無法使用簡體,所以只能調整字體
這是把彙整都做於工作簿1中
回复

使用道具 举报

 楼主| 发表于 2017-8-21 08:09 | 显示全部楼层

能否在我原有的代码上修改了
回复

使用道具 举报

 楼主| 发表于 2017-8-21 08:23 | 显示全部楼层

还有我导入的工作表内不止2个工作表,有可能是3个甚至是更多
回复

使用道具 举报

发表于 2017-8-21 09:43 | 显示全部楼层
代碼中的工作表可以不止一個,這是已經有考量,原有代碼修改,可能小弟的功力不夠,我再看看可不可以修改
回复

使用道具 举报

 楼主| 发表于 2017-8-21 11:47 | 显示全部楼层
idnoidno 发表于 2017-8-21 09:43
代碼中的工作表可以不止一個,這是已經有考量,原有代碼修改,可能小弟的功力不夠,我再看看可不可以修改

我用你的代码修改总是少一个表
回复

使用道具 举报

发表于 2017-8-21 12:54 | 显示全部楼层
本帖最后由 idnoidno 于 2017-8-21 13:21 编辑

您可以把檔案丟上來看看,我的設定是少一個,因為最後一個是我輸出的目標工作表For i = 1 To Worksheets.Count - 1
這邊有減1

回复

使用道具 举报

 楼主| 发表于 2017-8-21 14:52 | 显示全部楼层
本帖最后由 网络人 于 2017-8-21 15:41 编辑
idnoidno 发表于 2017-8-21 12:54
您可以把檔案丟上來看看,我的設定是少一個,因為最後一個是我輸出的目標工作表For i = 1 To Worksheets.Co ...

在原来的代码上修改了一下,但是是只能导入一个工作表的数据,麻烦高手帮忙看看怎么样修改代码

新建文件夹.rar

21.44 KB, 下载次数: 13

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 08:42 , Processed in 0.359767 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表