ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: huazai688

[求助] 如何合并不同工作簿中的同名工作表

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-12-22 00:55 | 显示全部楼层
本帖最后由 chenmeidi 于 2011-12-22 01:03 编辑

感谢楼上的大师的回答,可本人太低级了,实在搞不明白,太深奥了。
我的要合并的工作簿都设了工作表保护密码和工作簿保护密码,密码都是同一个“0”,但打开工作簿没有设定密码。
这段代码:  Set Wk = Workbooks.Open(MyPath & "\" & MyName, Password:="123", WriteResPassword:="456")
该插在哪儿,菜鸟反复测试,吃不消啊,希望高手帮帮忙,最好把整段代码帮我整理好,我要向高手们好好学习。

TA的精华主题

TA的得分主题

发表于 2011-12-21 22:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
chenmeidi 发表于 2011-12-21 22:40
Sub combo()
Dim Wk As Workbook, Sht As Worksheet, n As Integer, MyPath, MyName, t%
t = Val(InputBo ...

如果是打开工作簿需要密码,加上密码打开即可,如:
Set Wk = Workbooks.Open(MyPath & "\" & MyName, Password:="123", WriteResPassword:="456")

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-12-21 22:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub combo()
Dim Wk As Workbook, Sht As Worksheet, n As Integer, MyPath, MyName, t%
t = Val(InputBox("请选择工作表序号", , 1))
If t = 0 Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each sh In Sheets
    If sh.Name <> ActiveSheet.Name Then sh.Delete
Next
n = 1
MyPath = ThisWorkbook.Path & "\"   '指定路径
MyName = Dir(MyPath & "\" & "*.xls")    '寻找第一项
Do While MyName <> ""    '开始循环
If MyName <> ThisWorkbook.Name Then
Set Wk = Workbooks.Open(MyPath & "\" & MyName)
Wk.Sheets(t).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) '此处只插个第一个sheet
With ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
.Name = Mid(MyName, 1, Len(MyName) - 4) '重新命名sheet
.UsedRange.Value = .UsedRange.Value
End With
Wk.Close False
End If
MyName = Dir    '查找下一个
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
这个代码,正是我需要的了,只不过有要合并的工作簿一般都是加密锁定的,运行不了,如果要一个个解密,要耗费很多时间,请高手能指点,帮忙修改,我是菜鸟,才开始蹒跚学步。

TA的精华主题

TA的得分主题

发表于 2011-12-22 19:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
收藏起来,学习了

TA的精华主题

TA的得分主题

发表于 2011-12-22 22:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zhaogang1960 发表于 2011-12-21 22:58
如果是打开工作簿需要密码,加上密码打开即可,如:
Set Wk = Workbooks.Open(MyPath & "\" & MyName, P ...
  1. Sub combo()
  2. Dim Wk As Workbook, Sht As Worksheet, n As Integer, MyPath, MyName, t%
  3. t = Val(InputBox("请选择工作表序号", , 1))
  4. If t = 0 Then Exit Sub
  5. Application.ScreenUpdating = False
  6. Application.DisplayAlerts = False
  7. For Each sh In Sheets
  8.     If sh.Name <> ActiveSheet.Name Then sh.Delete
  9. Next
  10. n = 1
  11. MyPath = ThisWorkbook.Path & ""   '指定路径
  12. MyName = Dir(MyPath & "" & "*.xls")    '寻找第一项
  13. Do While MyName <> ""    '开始循环
  14. If MyName <> ThisWorkbook.Name Then
  15. Set Wk = Workbooks.Open(MyPath & "" & MyName)
  16. Wk.Sheets(t).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) '此处只插个第一个sheet
  17. With ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
  18. .Name = Mid(MyName, 1, Len(MyName) - 4) '重新命名sheet
  19. .UsedRange.Value = .UsedRange.Value
  20. End With
  21. Wk.Close False
  22. End If
  23. MyName = Dir    '查找下一个
  24. Loop
  25. Application.ScreenUpdating = True
  26. Application.DisplayAlerts = True
  27. End Sub
复制代码
麻烦大师再帮我修改一下代码,本人迫切需要这种合并功能,可太深奥了,能力有限,正在学习中。

TA的精华主题

TA的得分主题

发表于 2011-12-22 22:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
chenmeidi 发表于 2011-12-22 22:49
麻烦大师再帮我修改一下代码,本人迫切需要这种合并功能,可太深奥了,能力有限,正在学习中。

用下面一句替换原来的Set Wk = Workbooks.Open(MyPath & "\" & MyName)
Set Wk = Workbooks.Open(MyPath & "\" & MyName, Password:="123", WriteResPassword:="456")
如果只有打开密码,保留第一个即可,自己修改一下密码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-12-23 00:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 chenmeidi 于 2011-12-23 00:37 编辑

先谢谢赵老师了,我的工作簿打开没有设定密码,是工作表保护设定了密码“0”,
我用了你的修改的代码,运行时出现下列对话框
只有求助于你了,我前后两个都改成密码0,都用上去也不行,单独用前面的密码也不行,单独用后面的密码也不行,测试代码时看到代码 .UsedRange.Value = .UsedRange.Value   出现黄色标志了。
抽空帮我解决一下我的难题,麻烦你这么多,真是不好意思。
提示.jpg

TA的精华主题

TA的得分主题

发表于 2011-12-27 22:53 | 显示全部楼层
本帖最后由 chenmeidi 于 2011-12-27 22:56 编辑

请各位大师帮个忙,本人刚接触vba,对代码的编写不太懂,正在学习阶段,水平有限,麻烦大师给按我的意图编写或修改代码,我在线等了很多天了,能得到大师们的帮助或点拨,本人不胜感激,附件附后。

多工作簿合并.rar

56.72 KB, 下载次数: 218

TA的精华主题

TA的得分主题

发表于 2011-12-27 23:09 | 显示全部楼层
chenmeidi 发表于 2011-12-27 22:53
请各位大师帮个忙,本人刚接触vba,对代码的编写不太懂,正在学习阶段,水平有限,麻烦大师给按我的意图编写 ...
  1. Sub combo()
  2. Dim Wk As Workbook, Sht As Worksheet, n As Integer, MyPath, MyName, t%
  3. t = Val(InputBox("请选择工作表序号", , 1))
  4. If t = 0 Then Exit Sub
  5. Application.ScreenUpdating = False
  6. Application.DisplayAlerts = False
  7. For Each sh In Sheets
  8.     If sh.Name <> ActiveSheet.Name Then sh.Delete
  9. Next
  10. n = 1
  11. MyPath = ThisWorkbook.Path & ""   '指定路径
  12. MyName = Dir(MyPath & "" & "*.xls")    '寻找第一项
  13. Do While MyName <> ""    '开始循环
  14. If MyName <> ThisWorkbook.Name Then
  15. Set Wk = Workbooks.Open(MyPath & "" & MyName)
  16. Wk.Sheets(t).Unprotect (0) '这里加一句解除密码
  17. Wk.Sheets(t).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) '此处只插个第一个sheet
  18. With ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
  19. .Name = Mid(MyName, 1, Len(MyName) - 4) '重新命名sheet
  20. .UsedRange.Value = .UsedRange.Value
  21. End With
  22. Wk.Close False
  23. End If
  24. MyName = Dir    '查找下一个
  25. Loop
  26. Application.ScreenUpdating = True
  27. Application.DisplayAlerts = True
  28. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-12-29 01:48 | 显示全部楼层
zhaogang1960 发表于 2011-12-27 23:09

太感谢大师了,完全达到了我的要求了,大师真是太厉害了,我要慢慢学着,遇到问题还得请教你、麻烦你,O(∩_∩)O~,再次谢谢哦。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 07:19 , Processed in 0.038447 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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