Excel精英培训网

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

第十集练习题

[复制链接]
发表于 2012-6-22 12:42 | 显示全部楼层 |阅读模式
代码如下,问题是在vbe编辑器调试、运行都能通过;但是用控件加载宏就会出现运行时错误1004,所要命名的工作表不能和另一个工作表重名;不知道为什么
Sub 日报表格式生成()
Dim x As Integer
Dim y As Integer
Dim ws As Worksheet
Set ws = ActiveSheet
Sheets("日报表模板").Visible = True
For x = 1 To Sheets.Count
  If ws.Name = x & "日报表" Then y = x
Next
y = y + 1
Sheets("日报表模板").Copy after:=Sheets(Sheets.Count)
Set ws = ActiveSheet
ws.Name = (y & "日报表")
Sheets("日报表模板").Visible = False
End Sub
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-6-22 13:03 | 显示全部楼层
本帖最后由 JLxiangwei 于 2012-6-22 13:11 编辑
  1. Sub 日报表格式生成1()
  2. Dim x As Integer
  3. Dim y As Integer
  4. Dim ws As Worksheet
  5. Set ws = ActiveSheet
  6. Sheets("日报表模板").Visible = True
  7. For x = 1 To Sheets.Count
  8.   If ws.Name = x & "日报表" Then y = x
  9. Next
  10. y = y + 1
  11. Sheets("日报表模板").Copy after:=Sheets(Sheets.Count)
  12. Set ws = ActiveSheet
  13. ws.Name = (x - 2 & "日报表")
  14. Sheets("日报表模板").Visible = False
  15. End Sub
复制代码
  1. Sub 日报表格式生成1()
  2. Dim x As Integer
  3. Dim y As Integer
  4. Dim ws As Worksheet
  5. Set ws = ActiveSheet
  6. Sheets("日报表模板").Visible = True
  7. For x = 1 To Sheets.Count
  8.   If ws.Name <> x & "日报表" Then y = x
  9. Next
  10. y = y + 1
  11. Sheets("日报表模板").Copy after:=Sheets(Sheets.Count)
  12. Set ws = ActiveSheet
  13. ws.Name = (y - 2 & "日报表")
  14. Sheets("日报表模板").Visible = False
  15. End Sub
复制代码

数据关系没有理清吧
回复

使用道具 举报

 楼主| 发表于 2012-6-22 14:40 | 显示全部楼层
JLxiangwei 发表于 2012-6-22 13:03
数据关系没有理清吧

我试了你的两个方法 都没问题;但是你没理解我的程序的意思,如果出现在“1日报表前”有超过两张的工作表,“x日报表“间有不连续的报表,我的能实现,但你的程序就会出错。我的其实就是读符合”x日报表“形式的最后一个x,赋给y;按照你的方法,第一个程序完全没必要用到循环语句,判断语句,x=sheets.count就能实现,谢谢。
回复

使用道具 举报

发表于 2012-6-22 14:58 | 显示全部楼层
狮心王 发表于 2012-6-22 14:40
我试了你的两个方法 都没问题;但是你没理解我的程序的意思,如果出现在“1日报表前”有超过两张的工作表 ...

不连续的话就要判断工作表名称是不是“*日报表”样式的了
  1. Sub 日报表格式生成1()
  2.     Dim x As Integer
  3.     Dim y As Integer
  4.     Dim ws As Worksheet
  5.     Set ws = ActiveSheet
  6.     Sheets("日报表模板").Visible = True
  7.     For x = 1 To Sheets.Count
  8.         If ws.Name Like "*日报表" Then
  9.             y = Val(Left(ws.Name, 2))
  10.         End If
  11.     Next
  12.     y = y + 1
  13.     Sheets("日报表模板").Copy after:=Sheets(Sheets.Count)
  14.     Set ws = ActiveSheet
  15.     ws.Name = (y & "日报表")
  16.     Sheets("日报表模板").Visible = False
  17. End Sub
复制代码

回复

使用道具 举报

 楼主| 发表于 2012-6-22 15:04 | 显示全部楼层
JLxiangwei 发表于 2012-6-22 14:58
不连续的话就要判断工作表名称是不是“*日报表”样式的了

谢谢 这个方法管用 只是不知道自己的错在什么地方
回复

使用道具 举报

发表于 2012-6-22 15:11 | 显示全部楼层
狮心王 发表于 2012-6-22 15:04
谢谢 这个方法管用 只是不知道自己的错在什么地方

你要不连续的话,y=x没有用
我举个例子,比如第三个工作表是 “5日报表”
现在运行到x=3时
不满足 ws.Name = x & "日报表"这个条件
所以后面给y赋值就形同虚设
怎么可能得到正确的结果呢。
看你刚刚的回复,证明你对VBA有一定的认识。
你逐句运行一下就知道。

回复

使用道具 举报

 楼主| 发表于 2012-6-22 17:13 | 显示全部楼层
JLxiangwei 发表于 2012-6-22 15:11
你要不连续的话,y=x没有用
我举个例子,比如第三个工作表是 “5日报表”
现在运行到x=3时

对的 刚开始学 谢谢
回复

使用道具 举报

 楼主| 发表于 2012-6-22 21:35 | 显示全部楼层
JLxiangwei 发表于 2012-6-22 15:11
你要不连续的话,y=x没有用
我举个例子,比如第三个工作表是 “5日报表”
现在运行到x=3时

顺便问一下你的编辑器的行号什么是怎么调用出来的,看起来清楚多了
回复

使用道具 举报

发表于 2012-6-25 11:10 | 显示全部楼层
楼主可以试试这个代码
Sub 日报表格式生成()
Dim sh As Worksheet, iTime%
With Worksheets("日报表模板")
    .Visible = True
    .Copy after:=Sheets(Sheets.Count)
End With
For Each sh In Sheets
    If Right(sh.Name, 3) = "日报表" Then
        iTime = IIf(Val(Left(sh.Name, 1)) > iTime, Val(Left(sh.Name, 1)), iTime)
    End If
Next
iTime = iTime + 1
ActiveSheet.Name = iTime & "日报表"
Worksheets("日报表模板").Visible = False
End Sub

回复

使用道具 举报

发表于 2014-12-15 21:35 | 显示全部楼层
Sub 日报表格式生成()
Dim x As Integer
Dim a As Integer
a = 0
For x = 1 To Sheets.Count
If Sheets(x).Name Like "*日报表" Then
a = a + 1
End If
Next
a = a + 1
Worksheets("日报表模板").Visible = True
Worksheets("日报表模板").Copy after:=ActiveSheet

ActiveSheet.Name = a & "日报表"

Worksheets("日报表模板").Visible = False

End Sub
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 18:58 , Processed in 2.814689 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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