ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教VBA高手

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-11-17 20:31 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
现金日记账.rar (106.45 KB, 下载次数: 60)

看附件,里边余额是用函数实现的,那么,如何用宏来实现这个功能呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-17 21:11 | 显示全部楼层
本帖最后由 ok_welcome 于 2011-11-17 21:17 编辑
Bernard_ye 发表于 2011-11-17 21:00
Sub balance()
Dim i As Long
i = 8


Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Row < 5 Then Exit Sub
If Target.Column <> 7 Then Exit Sub
If Target.Value = "本月合计" Then
m = Target.Row - 1
i = Range("C" & m + 1).End(xlUp).Row
Range("H" & m + 1) = Evaluate("SUMPRODUCT(($B$6:$B" & i & "=$B" & i & ")*H$6:H" & i & ")")
Range("J" & m + 1) = Evaluate("SUMPRODUCT(($B$6:$B" & i & "=$B" & i & ")*J$6:J" & i & ")")
ElseIf Target.Value = "本年累计" Then
n = Target.Row - 2
Range("H" & n + 2) = Evaluate("SUMPRODUCT(($B$6:$B" & n & ">0)*H$6:H" & n & ")")
Range("J" & n + 2) = Evaluate("SUMPRODUCT(($B$6:$B" & n & ">0)*J$6:J" & n & ")")
End If
End Sub

怎么跟这个代码合在一起呢?并自动执行!!!谢谢!!

TA的精华主题

TA的得分主题

发表于 2011-11-17 21:00 | 显示全部楼层
Sub balance()
Dim i As Long
i = 8
Do While Range("G" & i) <> ""
    Select Case Range("G" & i)
        Case "过 次 页", "承 前 页", "本月合计", "本年累计"
            Range("L" & i).Value = Range("L" & (i - 1)).Value
        Case Else
            Range("L" & i).Value = Range("L" & (i - 1)).Value + Range("H" & i).Value - Range("J" & i).Value
    End Select
    i = i + 1
Loop
End Sub

TA的精华主题

TA的得分主题

发表于 2011-11-17 22:46 | 显示全部楼层
请见以下完整代码:
[code=vb]
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Row < 5 Then Exit Sub
If Target.Column = 7 Then
Select Case Target.Value
    Case "本月合计"
        m = Target.Row - 1
        i = Range("C" & m + 1).End(xlUp).Row
        Range("H" & m + 1) = Evaluate("SUMPRODUCT(($B$6:$B" & i & "=$B" & i & ")*H$6:H" & i & ")")
        Range("J" & m + 1) = Evaluate("SUMPRODUCT(($B$6:$B" & i & "=$B" & i & ")*J$6:J" & i & ")")
        Range("L" & m + 1) = Range("L" & m)
    Case "本年累计"
        m = Target.Row - 2
        Range("H" & m + 2) = Evaluate("SUMPRODUCT(($B$6:$B" & m & ">0)*H$6:H" & m & ")")
        Range("J" & m + 2) = Evaluate("SUMPRODUCT(($B$6:$B" & m & ">0)*J$6:J" & m & ")")
        Range("L" & m + 2) = Range("L" & m + 1)
    Case ""
        m = Target.Row
        Range("H" & m) = ""
        Range("J" & m) = ""
        Range("L" & m) = ""
    Case Else
        m = Target.Row
        Range("L" & m) = Range("H" & m) + Range("L" & m - 1) - Range("J" & m)
End Select
End If
If Target.Column = 8 Or Target.Column = 10 Then
    m = Target.Row
    Select Case Range("G" & m).Value
        Case "本月合计", "本年累计", "过 次 页", "承 前 页"
            Exit Sub
        Case Else
            If Range("H" & m) <> "" Or Range("J" & m) <> "" Then
                Range("L" & m) = Range("H" & m) + Range("L" & m - 1) - Range("J" & m)
            End If
    End Select
End If
End Sub
[/code]

TA的精华主题

TA的得分主题

发表于 2011-11-17 22:47 | 显示全部楼层
本帖最后由 风云际会6 于 2011-11-17 22:50 编辑

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Row < 6 Then Exit Sub
If Target.Column <> 7 Then Exit Sub
If Target.Value = "本月合计" Then
m = Target.Row
i = Range("C" & m).End(xlUp).Row
a = m + 1
Range("H" & m) = Evaluate("SUMPRODUCT(($B$6:$B" & i & "=$B" & i & ")*H$6:H" & i & ")")
Range("J" & m) = Evaluate("SUMPRODUCT(($B$6:$B" & i & "=$B" & i & ")*J$6:J" & i & ")")
ElseIf Target.Value = "本年累计" Then
n = Target.Row
Range("H" & n) = Evaluate("SUMPRODUCT(($B$6:$B" & n & ">0)*H$6:H" & n & ")")
Range("J" & n) = Evaluate("SUMPRODUCT(($B$6:$B" & n & ">0)*J$6:J" & n & ")")
End If
Dim s As Long
s = 8
Do While Range("G" & s) <> ""
    Select Case Range("G" & s)
        Case "过 次 页", "承 前 页", "本月合计", "本年累计"
            Range("L" & s).Value = Range("L" & (s - 1)).Value
        Case Else
            Range("L" & s).Value = Range("L" & (s- 1)).Value + Range("H" & s).Value - Range("J" & s).Value
    End Select
    s = s + 1
Loop
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-17 22:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Bernard_ye 发表于 2011-11-17 22:46
请见以下完整代码:

真厉害~!谢谢哦!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-17 23:04 | 显示全部楼层
风云际会6 发表于 2011-11-17 22:47
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Row < 6 Then Ex ...

这个有点小问题!我要的是在H,J列有数据输入时,在同一行的余额要算出余额来,而不是在下一行算出来!

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-17 23:31 | 显示全部楼层
Bernard_ye 发表于 2011-11-17 22:46
请见以下完整代码:

现金日记账1.rar (69.56 KB, 下载次数: 11)

你好!我想在附件里这个表中实现那些功能!代码如何改!?!原代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Row < 5 Then Exit Sub
If Target.Column <> 7 Then Exit Sub
If Target.Value = "本月合计" Then
m = Target.Row - 1
i = Range("C" & m + 1).End(xlUp).Row
Range("H" & m + 1) = Evaluate("SUMPRODUCT(($B$6:$B" & i & "=$B" & i & ")*H$6:H" & i & ")")
Range("J" & m + 1) = Evaluate("SUMPRODUCT(($B$6:$B" & i & "=$B" & i & ")*J$6:J" & i & ")")
Range("N" & m + 1) = Evaluate("SUMPRODUCT(($B$6:$B" & i & "=$B" & i & ")*N$6:N" & i & ")")
Range("P" & m + 1) = Evaluate("SUMPRODUCT(($B$6:$B" & i & "=$B" & i & ")*P$6:P" & i & ")")
ElseIf Target.Value = "本年累计" Then
n = Target.Row - 2
Range("H" & n + 2) = Evaluate("SUMPRODUCT(($B$6:$B" & n & ">0)*H$6:H" & n & ")")
Range("J" & n + 2) = Evaluate("SUMPRODUCT(($B$6:$B" & n & ">0)*J$6:J" & n & ")")
Range("N" & n + 2) = Evaluate("SUMPRODUCT(($B$6:$B" & n & ">0)*N$6:N" & n & ")")
Range("P" & n + 2) = Evaluate("SUMPRODUCT(($B$6:$B" & n & ">0)*P$6:P" & n & ")")
End If
End Sub


如何把上边的代码与下边您给我的代码合并起来!!谢谢

Sub balance()
Dim i As Long
i = 8
Do While Range("G" & i) <> ""
    Select Case Range("G" & i)
        Case "过 次 页", "承 前 页", "本月合计", "本年累计"
            Range("L" & i).Value = Range("L" & (i - 1)).Value
        Case Else
            Range("L" & i).Value = Range("L" & (i - 1)).Value + Range("H" & i).Value - Range("J" & i).Value
    End Select
    i = i + 1
Loop
End Sub

TA的精华主题

TA的得分主题

发表于 2011-11-17 23:53 | 显示全部楼层
ok_welcome 发表于 2011-11-17 23:31
你好!我想在附件里这个表中实现那些功能!代码如何改!?!原代码如下:

Private Sub Worksheet_ ...

请见附件。。。。。。

现金日记账.rar

70.3 KB, 下载次数: 37

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-18 00:19 | 显示全部楼层
Bernard_ye 发表于 2011-11-17 23:53
请见附件。。。。。。

学习了!谢谢!!!搞定!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-28 03:28 , Processed in 0.050320 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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