|
楼主 |
发表于 2010-3-28 10:38
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) '当工作表发生改变时执行程序(固定格式)
Dim i%, j%, n% '定义变量 i%,j%,n%
If Target.Count > 1 Or Target.Column > 1 Then Exit Sub '如果 Target的计数值>1或者 Target的列标>1 则执行 退出子程序
Application.Calculation = xlManual ' 应用程序的重新计算=手动
ActiveSheet.Calculate ' 活动工作表的重新计算
Sheets("信息卡").Calculate '<工作表>("信息卡" )的重新计算
Application.EnableEvents = False ' 应用程序的激活事件响应=False
If Target.Row > 2 And Target <> "" And Target <> Target.Offset(-1, 0) Then '如果 Target的行标>2 并且 Target 不等于 空值 并且 Target 不等于 Target的<偏移>(-1,0) 则执行
If [信息卡!i1] <> ActiveSheet.Name Then [信息卡!i1] = ActiveSheet.Name '如果 [信息卡!i1] 不等于 活动工作表的名称 则执行 [信息卡!i1]= 活动工作表的名称
If [信息卡!h1] <> Target Then [信息卡!h1] = Target '如果 [信息卡!h1] 不等于 Target 则执行 [信息卡!h1]=Target
Sheets("信息卡").[a8:a27,c8:c27,d8:d27,e8:e27,g8:g27,h8:h27,c3,c4,c5,e3,e4,e5,g3,g4] = "" '<工作表>("信息卡" )的[a8:a27,c8:c27,d8:d27,e8:e27,g8:g27,h8:h27,c3,c4,c5,e3,e4,e5,g3,g4]=空值
i = Target.Row 'i= Target的行标
n = 0 'n=0
For j = i To i + 20 '设定变量范围为j=i到i+20
If Range("a" & j) = Target Then '如果 <单元格>区域("a" & j)= Target 则执行
n = n + 1 'n=n+1
With Sheets("信息卡") '工作于<工作表>("信息卡")
.Range("c" & 3) = Range("c" & j) '<With对象>的<单元格>区域("c" & 3)=<单元格>区域("c" & j)
.Range("c" & 4) = Range("b" & j) '<With对象>的<单元格>区域("c" & 4)=<单元格>区域("b" & j)
.Range("e" & 3) = Range("d" & j) '<With对象>的<单元格>区域("e" & 3)=<单元格>区域("d" & j)
.Range("e" & 4) = Range("h" & j) '<With对象>的<单元格>区域("e" & 4)=<单元格>区域("h" & j)
.Range("e" & 5) = Range("j" & j) '<With对象>的<单元格>区域("e" & 5)=<单元格>区域("j" & j)
.Range("g" & 3) = Range("f" & j) '<With对象>的<单元格>区域("g" & 3)=<单元格>区域("f" & j)
.Range("g" & 4) = Range("g" & j) '<With对象>的<单元格>区域("g" & 4)=<单元格>区域("g" & j)
.Range("a" & 7 + n) = Year(Range("j" & j)) '<With对象>的<单元格>区域("a" & 7 + n)=Year(<单元格>区域("j" & j))
.Range("e" & 7 + n) = Range("k" & j) '<With对象>的<单元格>区域("e" & 7 + n)=<单元格>区域("k" & j)
.Range("g" & 7 + n) = Range("l" & j) '<With对象>的<单元格>区域("g" & 7 + n)=<单元格>区域("l" & j)
.Range("h" & 7 + n) = (.Range("e" & 7 + n)) + (.Range("g" & 7 + n)) '<With对象>的<单元格>区域("h" & 7 + n)=(<With对象>的<单元格>区域("e" & 7 + n))+(<With对象>的<单元格>区域("g" & 7 + n))
.Range("d" & 7 + n) = 12 '<With对象>的<单元格>区域("d" & 7 + n)=12
End With 'With语句结束
End If 'If判断过程结束
Next '下一个
End If 'If判断过程结束
If Target.Row > 3 And Target = Target.Offset(-1, 0) And Target <> "" And Target.Offset(0, 1) = "" Then '如果 Target的行标>3 并且 Target= Target的<偏移>(-1,0) 并且 Target 不等于 空值 并且 Target的<偏移>(0,1)=空值 则执行
Range("b" & Target.Row - 1 & ":g" & Target.Row - 1).Copy Range("b" & Target.Row) '<单元格>区域("b" & Target.Row - 1 & ":g" & Target的行标-1 )的复制<单元格>区域("b" & Target.Row)
Range("h" & Target.Row) = Range("h" & Target.Row - 1) + 1 '<单元格>区域("h" & Target.Row)=<单元格>区域("h" & Target.Row - 1)+1
Range("l" & Target.Row - 1 & ":n" & Target.Row - 1).Copy Range("l" & Target.Row) '<单元格>区域("l" & Target.Row - 1 & ":n" & Target的行标-1 )的复制<单元格>区域("l" & Target.Row)
End If 'If判断过程结束
Application.EnableEvents = True ' 应用程序的激活事件响应=True
Application.Calculation = xlAutomatic ' 应用程序的重新计算=xlAutomatic
End If 'If判断过程结束
End If 'If判断过程结束
End Sub '子程序结束
' |
|