Excel精英培训网

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

麻烦老师,帮我将这段代码合并下,谢谢

[复制链接]
发表于 2012-10-13 18:02 | 显示全部楼层 |阅读模式
麻烦老师,帮我将这段代码合并下,谢谢
代码1:
Private Sub Worksheet_Change(ByVal T As Range)    '私有的子程序 工作表_Change(变量T 为 单元格区域)
If T.Count > 1 Then Exit Sub    '如果  T的计数值>1 则执行 退出子程序
Dim f As Object, s As Object, i As Integer, i1 As Integer, i2 As Integer, arr(), dic As New Dictionary    '定义变量 f 为 对象,s 为 对象,i 为 整型值,i1 为 整型值,i2 为 整型值,arr(),dic 为  新的 字典
If T.Address = "$L$2" Then    '如果  T的地址="$L$2" 则执行
  Set f = GetObject(ThisWorkbook.Path & "\" & T.Value & ".xls")    '设定f=<获取对象>( 当前工作簿的路径 & "\" &  T的值 & ".xls")
  Sheets("分析考试名称").Range("A:A").Clear    '<工作表>("分析考试名称" )的<单元格>区域("A:A" )的清除
  For Each s In f.Sheets    '设定变量范围为每一个s位于 f的表单集合
    i = i + 1    'i=i+1
    Sheets("分析考试名称").Cells(i, 1) = s.Name    '<工作表>("分析考试名称" )的<单元格>坐标(i,1)= s的名称
  Next    '下一个
  f.Close    ' f的关闭
  Set f = Nothing    '设定 f=空值
  Set s = Nothing    '设定s=空值
ElseIf T.Address = "$R$2" Then    '另外如果 T的地址="$R$2" 则执行
  Set f = GetObject(ThisWorkbook.Path & "\" & Range("$L$2").Value & ".xls")    '设定f=<获取对象>( 当前工作簿的路径 & "\" & <单元格>区域("$L$2" )的值 & ".xls")
  arr = f.Sheets(T.Value).UsedRange.Value    'arr= f的<工作表>( T的值 )的已使用区域的值
  Set f = Nothing    '设定f=空值
  With Sheets("工作表")   '此为要清除原有数据的,如果是添加在后面的话,请用下面那行的被注释了的    '工作于<工作表>("工作表")'此为要清除原有数据的,如果是添加在后面的话,请用下面那行的被注释了的
      .[A:Q].Clear    '<With对象>的Cells.Clear
      .Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr    '<With对象>的<单元格>坐标(1,1 )的<重调大小>(<数组上限>(arr,1),<数组上限>(arr,2))=arr
  End With    'With语句结束
  'Sheets("工作表").Cells(65536, 1).End(xlUp)(2, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr '如果用这行,请将上面四行注释掉
  For i = 1 To UBound(arr)    '设定变量范围为i=1到<数组上限>(arr)
     dic(arr(i, 1)) = ""    'dic(arr(i,1))=空值
  Next    '下一个
  dic.Remove ("")    ' dic的移除 ("")
  With Sheets("分析班别表")    '工作于<工作表>("分析考试名称")
      .[b:b].Clear    '<With对象>的[b :b]的清除
      .[B1].Resize(dic.Count).Value = Application.Transpose(dic.Keys)    '<With对象>的[R4].<重调大小>( Dic的计数值 )的值= 应用程序的<区域转置>( Dic的关键字)
     .[B1].Resize(dic.Count).Sort key1:=.[B1], order1:=1, Header:=xlNo    '<With对象>的[R4].<重调大小>( Dic的计数值 )的排序 关键字1=<With对象>的[R4],order1=1,标题=xlNo
End With    'With语句结束
    dic.RemoveAll    ' Dic的RemoveAll
  Application.EnableEvents = True    '开启事件响应
End If    'If判断过程结束
End Sub    '子程序结束

代码2
  • Private Sub Worksheet_Change(ByVal Target As Range)
  • Dim rng As Range
  • Set rng = Union([c14:c22], [c31:c39])
  •     If Target.Address = "$E$11" Then
  •         Application.ScreenUpdating = False
  •         Dim r As Range
  •         Cells.EntireRow.Hidden = False
  •         For Each r In rng
  •             If r.Value = 0 Then r.EntireRow.Hidden = True
  •         Next
  •         Application.ScreenUpdating = True
  •     End If
  • End Sub

先谢谢老师,谢谢

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-10-13 19:40 | 显示全部楼层

  1. Private Sub Worksheet_Change(ByVal T As Range)    '私有的子程序 工作表_Change(变量T 为 单元格区域)
  2.     Dim rng As Range
  3.    
  4.     Set rng = Union([c14:c22], [c31:c39])
  5.    
  6.     If T.Count > 1 Then Exit Sub    '如果  T的计数值>1 则执行 退出子程序
  7.     Dim f As Object, s As Object, i As Integer, i1 As Integer, i2 As Integer, arr(), dic As New Dictionary    '定义变量 f 为 对象,s 为 对象,i 为 整型值,i1 为 整型值,i2 为 整型值,arr(),dic 为  新的 字典
  8.     If T.Address = "$L$2" Then    '如果  T的地址="$L$2" 则执行
  9.         Set f = GetObject(ThisWorkbook.Path & "" & T.Value & ".xls")    '设定f=<获取对象>( 当前工作簿的路径 & "" &  T的值 & ".xls")
  10.         Sheets("分析考试名称").Range("A:A").Clear    '<工作表>("分析考试名称" )的<单元格>区域("A:A" )的清除
  11.             For Each s In f.Sheets    '设定变量范围为每一个s位于 f的表单集合
  12.                 i = i + 1    'i=i+1
  13.                 Sheets("分析考试名称").Cells(i, 1) = s.Name    '<工作表>("分析考试名称" )的<单元格>坐标(i,1)= s的名称
  14.             Next    '下一个
  15.         f.Close    ' f的关闭
  16.         Set f = Nothing    '设定 f=空值
  17.         Set s = Nothing    '设定s=空值
  18.     ElseIf T.Address = "$R$2" Then    '另外如果 T的地址="$R$2" 则执行
  19.             Set f = GetObject(ThisWorkbook.Path & "" & Range("$L$2").Value & ".xls")    '设定f=<获取对象>( 当前工作簿的路径 & "" & <单元格>区域("$L$2" )的值 & ".xls")
  20.             arr = f.Sheets(T.Value).UsedRange.Value    'arr= f的<工作表>( T的值 )的已使用区域的值
  21.             Set f = Nothing    '设定f=空值
  22.             With Sheets("工作表")   '此为要清除原有数据的,如果是添加在后面的话,请用下面那行的被注释了的    '工作于<工作表>("工作表")'此为要清除原有数据的,如果是添加在后面的话,请用下面那行的被注释了的
  23.                 .[A:Q].Clear    '<With对象>的Cells.Clear
  24.                 .Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr    '<With对象>的<单元格>坐标(1,1 )的<重调大小>(<数组上限>(arr,1),<数组上限>(arr,2))=arr
  25.             End With    'With语句结束
  26.             'Sheets("工作表").Cells(65536, 1).End(xlUp)(2, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr '如果用这行,请将上面四行注释掉

  27.             For i = 1 To UBound(arr)    '设定变量范围为i=1到<数组上限>(arr)
  28.                 dic(arr(i, 1)) = ""    'dic(arr(i,1))=空值
  29.             Next    '下一个
  30.             dic.Remove ("")    ' dic的移除 ("")
  31.             With Sheets("分析班别表")    '工作于<工作表>("分析考试名称")
  32.                 .[b:b].Clear    '<With对象>的[b :b]的清除
  33.                 .[B1].Resize(dic.Count).Value = Application.Transpose(dic.Keys)    '<With对象>的[R4].<重调大小>( Dic的计数值 )的值= 应用程序的<区域转置>( Dic的关键字)
  34.                 .[B1].Resize(dic.Count).Sort key1:=.[B1], order1:=1, Header:=xlNo    '<With对象>的[R4].<重调大小>( Dic的计数值 )的排序 关键字1=<With对象>的[R4],order1=1,标题=xlNo
  35.             End With    'With语句结束
  36.             dic.RemoveAll    ' Dic的RemoveAll
  37.             Application.EnableEvents = True    '开启事件响应
  38.     'End If    'If判断过程结束
  39.     ElseIf Target.Address = "$E$11" Then
  40.         Application.ScreenUpdating = False
  41.         Dim r As Range
  42.         Cells.EntireRow.Hidden = False
  43.         For Each r In rng
  44.             If r.Value = 0 Then r.EntireRow.Hidden = True
  45.         Next
  46.         Application.ScreenUpdating = True
  47.     End If
  48. End Sub    '子程序结束
复制代码
回复

使用道具 举报

发表于 2012-10-13 19:41 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2012-10-14 21:43 | 显示全部楼层
hwc2ycy 发表于 2012-10-13 19:41
楼主,试试看看成不。

老师,谢谢,但运行不了,运行时出错

运行出错 424
aa.png
回复

使用道具 举报

发表于 2012-10-14 21:48 | 显示全部楼层
什么提示?
回复

使用道具 举报

发表于 2012-10-14 21:50 | 显示全部楼层
把你的附件传上来吧。
我当时没做测试的,只是合并了代码。
回复

使用道具 举报

 楼主| 发表于 2012-10-15 08:06 | 显示全部楼层
hwc2ycy 发表于 2012-10-14 21:50
把你的附件传上来吧。
我当时没做测试的,只是合并了代码。

老师,附件太大,不好上传,可以发上你邮箱给你吗?谢谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 01:40 , Processed in 0.548243 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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