ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 批量增加工作表并命名,求修改(精简代码),谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-2-5 19:44 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
其实我想要的效果是 一次增加一个工作表。  附件里面的代码是批量增加的。

另外我是在inputbox里面输入表格名称 ,一个一个增加,并重新命名。

现有的代码已经达到目的,但是拼凑起来的始终不完美,求高手修改……

见附件详细说明。谢谢! 批量加表格1.rar (22.73 KB, 下载次数: 133)

TA的精华主题

TA的得分主题

发表于 2012-2-5 19:59 | 显示全部楼层
see if help you,
No needed to be so complex

Sub wode啊()
If Range("a1") = "" Then
   MsgBox "你还没有输入新增构件表名称!", 64, "提示"
   Exit Sub
Else
        Sheets("样表").Copy , Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = Sheets("表头").Range("a1")
End If
End Sub

TA的精华主题

TA的得分主题

发表于 2012-2-5 20:01 | 显示全部楼层
Sub wode啊() '下面是拼凑起来的代码,反正是能用
Application.ScreenUpdating = False
    Dim X As Worksheet
    n = InputBox("写入表格名称", "新增构件表")
    On Error Resume Next
    If X Is Nothing Then
        Sheets("样表").Copy , Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = n
    End If
    Set X = Nothing
    Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-5 20:08 | 显示全部楼层
KCFONG 发表于 2012-2-5 19:59
see if help you,
No needed to be so complex

KFC可能理解有误,我就是不需要把inputbox的内容输入到单元格内。

3楼的代码就是这个意思,马上试试,谢谢~

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-5 20:12 | 显示全部楼层
ok了。谢谢。
如果样表本身是隐藏的,复制的表格也就隐藏了。
因此我加了一句Sheets(Sheets.Count).Visible = 1   搞定。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-5 20:15 | 显示全部楼层
lhdcxz 发表于 2012-2-5 20:01
Sub wode啊() '下面是拼凑起来的代码,反正是能用
Application.ScreenUpdating = False
    Dim X As Wor ...

试了一下,还是有个问题,如果inputbox 输入的 新增表格名称与 已经存在的表格名称相同,还是新建了表格!

如何加代码避免这个问题呢?

还有非法符号、字符长度等问题

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-5 20:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 pp9257 于 2012-2-5 20:22 编辑

下面是罗刚君老师在别的帖子的相关代码,3楼的朋友可否借鉴一下,帮助我解决一下,谢谢
Sub test()
    Dim aa As String
    On Error Resume Next
    aa = InputBox("sheet命名", "初步分析")
    If Len(aa) > 0 Then
        Sheets.Add , Sheets(Sheets.Count)
        ActiveSheet.Name = aa
        If Err <> 0 Then
            Application.DisplayAlerts = False
            ActiveSheet.Delete
            Application.DisplayAlerts = True
            MsgBox "请重新录入"
        End If
    End If
End Sub
这样会更好
1.新表放最后
2.如果没录入名字,则不生成新表,这是防错的必要
3.如果录入特殊字符,例如“\\”,由于它不能作为工作表名字,那么生成的新表会命名不成功,所以要删除未命名的表
4.工作表名有长度限制,所以当超过上限时同样会命名不成功,那么需要再次防错,将未命名的表删除

代码尽量考虑全面一点

以上是罗老师的原话,一字不差的copy来了 呵呵

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-5 20:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 pp9257 于 2012-2-5 20:44 编辑

  1. Sub wode啊2() '下面是拼凑起来的代码,反正是能用
  2. Application.ScreenUpdating = False
  3.     Dim X As Worksheet
  4.     n = InputBox("写入表格名称", "新增构件表")
  5.     On Error Resume Next
  6.     If X Is Nothing And Len(n) > 0 Then
  7.         Sheets("样表").Copy , Sheets(Sheets.Count)
  8.         Sheets(Sheets.Count).Name = n
  9.         Sheets(Sheets.Count).Visible = 1
  10.     Else
  11.     MsgBox "没有输入新增表名称!", 64, "提示"
  12.     End If
  13.     If Err <> 0 Then
  14.             Application.DisplayAlerts = False
  15.             ActiveSheet.Delete
  16.             Application.DisplayAlerts = True
  17.             MsgBox "表名重复或含有非法字符!", 64, "提示"
  18.     End If
  19.    
  20.     Set X = Nothing
  21.     Application.ScreenUpdating = True
  22. End Sub
复制代码

嘿嘿,这样融合在一起了。 不知道还有什么漏洞。
还加了两个消息框。。。

TA的精华主题

TA的得分主题

发表于 2012-2-5 20:45 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-5 20:50 | 显示全部楼层
弱弱的再问一句,代码里面空行比较多的话,是否对代码速度有影响?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 19:27 , Processed in 0.047058 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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