Excel精英培训网

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

[已解决]如何让宏命令里面也来个先条件判断再执行命令?

[复制链接]
发表于 2013-5-29 12:12 | 显示全部楼层 |阅读模式
本帖最后由 cyy1905 于 2013-5-29 15:13 编辑

报表.rar (31.22 KB, 下载次数: 27)
发表于 2013-5-29 12:20 | 显示全部楼层
其实不用这么复杂的  你最好传个附件
回复

使用道具 举报

发表于 2013-5-29 12:36 | 显示全部楼层
for x=1 to sheets.count
if sheets(x).name="AA"  then
要执行的程序语句
else
msgbox  "AA工作有不存在"
end if
AA为你要判断的工作表名
回复

使用道具 举报

 楼主| 发表于 2013-5-29 15:15 | 显示全部楼层
1032446692 发表于 2013-5-29 12:20
其实不用这么复杂的  你最好传个附件

附件已上传,主要是要清除的位置每个工作表都不太一样,所以我只能从头录制一遍宏命令,再做小修改。希望有更简单一点的处理方法,谢谢!
回复

使用道具 举报

发表于 2013-5-30 07:12 | 显示全部楼层
Sub A类报表美容()
' A类报表美容 Macro
' 整个报表清除审核公式、不显示零值、光标回到每个工作表的A1单元格,最后光标回到资产负债表A1单元格。
' 快捷键: Ctrl+q
    Dim i
    Application.ScreenUpdating = False
    For i = 1 To Sheets.Count
        Sheets(i).Select
        Select Case Sheets(i).Name
          Case "资产负债表"
            Columns("I:L").Select
            Selection.ClearContents
          Case "利润表"
             Columns("G:H").Select
            Selection.ClearContents
          Case "销售费用明细表"
            Columns("M:P").Select
            Selection.ClearContents
          Case "管理费用明细表"
            Columns("M:P").Select
            Selection.ClearContents
          Case "资产减值损失明细表"
            Columns("I:N").Select
            Selection.ClearContents
          Case "制造费用及财务费用明细表"
            Columns("M:P").Select
            Selection.ClearContents
          Case "应交税费明细表"
            Columns("K:Q").Select
            Selection.ClearContents
          Case "工业增加值统计表"
            Columns("G:H").Select
            Selection.ClearContents
          Case "其他业务收支明细表"
            Columns("G:H").Select
            Selection.ClearContents
          Case "工资表"
            Columns("L:R").Select
            Selection.ClearContents
          Case "营业外收支明细表"
            Columns("H:I").Select
            Selection.ClearContents
          Case "应交增值税明细表"
            Columns("G:I").Select
            Selection.ClearContents
        Case "资产负债表"
            Application.SendKeys ("{ENTER}{ENTER}%fx")
        End Select
        ActiveWindow.DisplayZeros = False
    Next i
    Application.ScreenUpdating = True
    ActiveWorkbook.Save
End Sub
回复

使用道具 举报

发表于 2013-5-30 07:39 | 显示全部楼层
方法有很多,这里我做一个设置表,表里读取非“设置表” 以外所有工作表的的名称,然后你再添加上每个表需要清除内容的位置就可以直接使用了

QQ截图20130530072841.jpg

里面有两个按钮,刷新工作表,作用清除所有的区域设置,并重新读取工作表
代码如下

  1. Private Sub CommandButton1_Click()
  2. Dim Hx As Long, Sh As Worksheet
  3.   With Sheets("设置表")
  4.     Hx = .Range("A65536").End(xlUp).Row
  5.     .Range("A2:B" & Hx).ClearContents
  6.     For Each Sh In Worksheets
  7.       If Sh.Name <> .Name Then
  8.         .Range("A65536").End(xlUp).Offset(1, 0).Value = Sh.Name
  9.       End If
  10.     Next
  11.   End With
  12. End Sub
复制代码
第二个按钮,清除内容,调用了 模块1中写的一个过程
你可以单独使用这个过程,不需要添加“清除内容”按钮
代码如下:

  1. Private Sub CommandButton2_Click()
  2. Call 模块1.Clearr
  3. End Sub
复制代码
模块1中的 clearr 代码如下:

  1. Public Sub Clearr()
  2. Dim Hx As Byte
  3.   With Sheets("设置表")
  4.     For Hx = 2 To .Range("A65536").End(xlUp).Row
  5.       If Len(.Cells(Hx, "B").vlaue) > 0 Then
  6.         Sheets(.Cells(Hx, "A").Value).Range(.Cells(Hx, "B").Value).ClearContents
  7.       End If
  8.     Next
  9.   End With
  10. End Sub
复制代码
这样设计的好处是,对于需要清除的单元格区域可以随意添加,修改

但需要注意的是,对于有合并单元格的,需要做详细的设置,否则会提示错误“不能对合并单元格做部分更改”
回复

使用道具 举报

 楼主| 发表于 2013-5-30 09:54 | 显示全部楼层
1032446692 发表于 2013-5-30 07:12
Sub A类报表美容()
' A类报表美容 Macro
' 整个报表清除审核公式、不显示零值、光标回到每个工作表的A1单 ...

谢谢!可以达到先判断工作表是否存在再清除规定区域内容的目的。
不过没有完成的步骤有:每个工作表的光标没有回到A1位置,最后当前工作表也没有回到第一个资产负债表那里呢
回复

使用道具 举报

 楼主| 发表于 2013-5-30 10:01 | 显示全部楼层
无聊的疯子 发表于 2013-5-30 07:39
方法有很多,这里我做一个设置表,表里读取非“设置表” 以外所有工作表的的名称,然后你再添加上每个表需要 ...

首先感谢你贡献的方法
不过我觉得这个方法效率不高吧,对于我来说
因为是不是得在工作簿里面增加一个设置表?如果是的话那就很复杂了,因为我分子公司报表有八十几个,这样操作工作量很大。
原来我的操作是设一个宏,一打开分子公司报表就按下快捷键,完成后报表自动关闭,所以我的重复动作就是打开工作簿,按下快捷键而已,问题就是每个工作簿里面的工作表有几个公司不同的,所以就是要设置一个条件判断才行
回复

使用道具 举报

发表于 2013-5-30 12:58 | 显示全部楼层    本楼为最佳答案   
Option Explicit
Sub A类报表美容()
' A类报表美容 Macro
' 整个报表清除审核公式、不显示零值、光标回到每个工作表的A1单元格,最后光标回到资产负债表A1单元格。
' 快捷键: Ctrl+q
    Dim i
    Application.ScreenUpdating = False
    For i = 1 To Sheets.Count
        Sheets(i).Select
        Select Case Sheets(i).Name
          Case "资产负债表"
            Columns("I:L").Select
            Selection.ClearContents
          Case "利润表"
             Columns("G:H").Select
            Selection.ClearContents
          Case "销售费用明细表"
            Columns("M:P").Select
            Selection.ClearContents
          Case "管理费用明细表"
            Columns("M:P").Select
            Selection.ClearContents
          Case "资产减值损失明细表"
            Columns("I:N").Select
            Selection.ClearContents
          Case "制造费用及财务费用明细表"
            Columns("M:P").Select
            Selection.ClearContents
          Case "应交税费明细表"
            Columns("K:Q").Select
            Selection.ClearContents
          Case "工业增加值统计表"
            Columns("G:H").Select
            Selection.ClearContents
          Case "其他业务收支明细表"
            Columns("G:H").Select
            Selection.ClearContents
          Case "工资表"
            Columns("L:R").Select
            Selection.ClearContents
          Case "营业外收支明细表"
            Columns("H:I").Select
            Selection.ClearContents
          Case "应交增值税明细表"
            Columns("G:I").Select
            Selection.ClearContents
        Case "资产负债表"
            Application.SendKeys ("{ENTER}{ENTER}%fx")
        End Select
        ActiveWindow.DisplayZeros = False
        Cells(1, 1).Select
    Next i
    Application.ScreenUpdating = True
    Sheets("资产负债表").Select
    Cells(1, 1).Select
    ActiveWorkbook.Save
End Sub
回复

使用道具 举报

发表于 2013-5-30 13:02 | 显示全部楼层
cyy1905 发表于 2013-5-30 09:54
谢谢!可以达到先判断工作表是否存在再清除规定区域内容的目的。
不过没有完成的步骤有:每个 ...

其实  我认为这是没有必要的   你想选那个工作表 那也只是点一点的事
再说了   这是很简单的  你可以自己学做做

我在楼上给你改了一下  你看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 18:31 , Processed in 0.627529 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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