ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: cellolose

[求助] 用VBA复制工作表到新工作簿中

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-1 03:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 cellolose 于 2013-2-1 03:07 编辑
zengxp 发表于 2013-1-31 22:26
不明白你的意思, 如果仅是选择性粘贴,图片是无法复制过去的,而且经过赋值的处理已经没有公式;
批量的 ...

1不需要图片复制过去,如果可以的话只复制A1:G3表格部分即可。所以能够实现选择性粘贴的话最好不过了。

2新生成的工作簿是存放在当前文件夹中的。不需要查找整个电脑所有的盘符,那样不现实。

3如果在当前文件夹中存在重名工作簿,能不能不替换它(现在的问题就是它会替换,而不是我想要的复制新工作表副本到新工作簿中),在保留原工作簿里的工作表的基础上,复制一张新的工作表副本到新工作簿中。
你说的已有工作薄里的内容我是希望完全保留,复制来的数值要粘贴到新工作表里?


TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-1 03:40 | 显示全部楼层
本帖最后由 cellolose 于 2013-2-1 03:43 编辑

是我表达不够清楚。
我做个样例出来吧:
我是想通过例如附件中“源.xls”这样的工作簿,生成“张三.xls”、“李四.xls”、“王五.xls”这样的档案工作簿。
因为数据源有上千条记录,表格也不是怎么简单,要为每个人建立个人各个时期、科目的档案,所以很麻烦。
所以还要麻烦多多费心了。 样例.rar (20.6 KB, 下载次数: 80)

TA的精华主题

TA的得分主题

发表于 2013-2-1 13:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
复制 A1:G3 区域, 不是用你的方法做的,测试可行
运行程序前先备份

在Excel中玩转邮件合并.zip

97.97 KB, 下载次数: 277

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-21 20:26 | 显示全部楼层
zengxp 发表于 2013-2-1 13:06
复制 A1:G3 区域, 不是用你的方法做的,测试可行
运行程序前先备份

  1. Private Sub CommandButton2_Click()
  2.    
  3.     Dim wb As Workbook
  4.     Set y = CreateObject("Scripting.FileSystemObject")

  5.     Application.DisplayAlerts = False
  6.     Application.ScreenUpdating = False


  7.     Sheets.Add after:=Sheets(Sheets.Count)
  8.     Set She = Sheets(Sheets.Count)
  9.    
  10.     Set Sht = Sheet9 '所需要复制的工作表
  11.     Sht.Cells.Copy '格式刷整个表格格式到目标表格
  12.     She.Cells.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
  13.     SkipBlanks:=False, Transpose:=False
  14.     She.Range("AC2:AD5").ClearFormats   '清除表格式(注意范围)
  15.     Application.CutCopyMode = False
  16.    
  17.     ActiveWindow.DisplayZeros = False   '清除全表零值显示



  18.         For i = [AD4] To [AD5]   '通过开始行号、结束行号控制运行保存范围
  19.             Sht.Activate
  20.             [AD2] = i
  21.             Sht.Range("A1:AB43").Copy '选择复制范围(注意范围)
  22.    
  23.             She.Select
  24.             She.Range("A1").Select
  25.             Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
  26.                 xlNone, SkipBlanks:=False, Transpose:=False
  27.             Application.CutCopyMode = False

  28.                     
  29.             ActiveSheet.Name = [J31].Value   '赋值当前工作表名(指定单元格)
  30.             wbName = ThisWorkbook.Path & Application.PathSeparator & [C3].Value & ".xls"   '准备工作簿名赋值为单元格的值(指定单元格)

  31.             If y.FileExists(wbName) Then                     '复制至已有工作簿中
  32.                 Set wb = Workbooks.Open(wbName)
  33.                 She.Copy Before:=wb.Sheets(Sheets.Count)
  34.                 ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value  '保留单元格数值,去掉公式
  35.                 wb.Close True
  36.             Else                                             '复制生成新工作簿中
  37.                 She.Copy
  38.                 ActiveWorkbook.SaveAs wbName
  39.                 ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value  '保留单元格数值,去掉公式
  40.                 ActiveWorkbook.Close True
  41.             End If

  42.         Next
  43.         
  44.     Application.CutCopyMode = False
  45.     She.Delete
  46.    
  47.     Application.DisplayAlerts = True
  48.     Application.ScreenUpdating = True
  49.     MsgBox "导出成功."
  50.    
  51. End Sub
复制代码
这个代码是“邮件合并”在excel中的实现,能生成个体表格。
学习了zengxp以及版主的一些代码
自己试着写了下,虽然代码不是最简洁最好的,但实现了自己想要的功能。

zengxp的代码设计中,先拷贝到了新建的最后的工作表中,开始我认为这个降低了运行的效率,可是后来发现这个设计很好,它避免了重命名文件重名情况下程序无法运行的现象,这里赞一个。

在此,感谢
蓝桥玄霜
zengxp
山菊花老师

TA的精华主题

TA的得分主题

发表于 2013-9-21 09:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cellolose 发表于 2013-2-1 02:51
谢谢zengxp一直以来的帮助。

现在上传的这个附件实现了批量生成!

路过,学习了,谢谢!

TA的精华主题

TA的得分主题

发表于 2013-9-21 09:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
cellolose 发表于 2013-2-1 02:51
谢谢zengxp一直以来的帮助。

现在上传的这个附件实现了批量生成!

路过,学习了,谢谢!

TA的精华主题

TA的得分主题

发表于 2013-9-21 09:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-9-21 15:36 | 显示全部楼层
谢谢zengxp一直以来的帮助。
正好有需要

TA的精华主题

TA的得分主题

发表于 2022-8-26 10:05 | 显示全部楼层
zengxp 发表于 2013-2-1 13:06
复制 A1:G3 区域, 不是用你的方法做的,测试可行
运行程序前先备份

请问如果根据工作表【表格】的【开始行号】[J4]和【结束行号】[J5]来进行批量新建工作表至新工作簿,请问VBA代码需要怎么调整的呢??
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-12-17 18:59 , Processed in 0.025148 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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