ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 麻烦哪位老是帮我看看哪里出错了

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-4-1 00:52 | 显示全部楼层 |阅读模式
  1. Function 小计(A, B, C) '列号 行号动态 计算量大
  2. '自动进行小计、合计,C为其他计算公式
  3. '     Application.Volatile '工作簿修改时刷新(导致其他工作表更新时错误)
  4. 'Application.Calculate '改动相关数据时刷新函数
  5.     C = 计算(C)
  6.     If A = "" Then
  7.         小计 = C
  8.         Exit Function
  9.     Else
  10.         x = A.Row
  11.         Y = A.Column
  12.         Z = B.Column
  13. '-----------------------------------------------------------------
  14. '非显示C值
  15.         If A <> "合计" Then
  16.             If A <> "小计" Then
  17.                 小计 = C
  18.                 Exit Function
  19.             Else
  20. '-----------------------------------------------------------------
  21. '小计
  22.                 For i = x - 1 To 1 Step -1 '提取小计开始行号
  23.                     If Cells(i, Y) = "合计" Then
  24.                         D = i + 1
  25.                         Exit For
  26.                     Else
  27.                         If Cells(i, Y) = "小计" Then
  28.                             D = i + 1
  29.                             Exit For
  30.                         Else
  31.                             If i = 1 Then
  32.                                 D = 1
  33.                                 Exit For
  34.                             End If
  35.                         End If
  36.                     End If
  37.                 Next i '提取小计开始行号为D
  38.         '            小计 = Chr(64 + Z) & D & ":" & Chr(64 + Z) & X - 1 '辅助:查看引用单元格是否正确
  39.                 小计 = Application.WorksheetFunction.Subtotal(109, Range(Chr(64 + Z) & D & ":" & Chr(64 + Z) & x - 1))
  40. '                小计 = Application.WorksheetFunction.Sum(Range(Chr(64 + Z) & D & ":" & Chr(64 + Z) & x - 1)) '计算结果
  41.             End If
  42.             Exit Function
  43.         Else
  44. '-----------------------------------------------------------------
  45. '合计
  46.             For i = x - 1 To 1 Step -1 '提取小计单元格
  47.                 If Cells(i, Y) = "合计" Then
  48.                     Exit For
  49.                 Else
  50.                     D = Cells(i, Y)
  51.                     If D = "小计" Then
  52.                         E = Chr(64 + Z) & i & "," & E
  53.                     End If
  54.                 End If
  55.             Next i
  56.             E = Left(E, Len(E) - 1)
  57.             小计 = Application.WorksheetFunction.Sum(Range(E))
  58.         End If
  59.         Exit Function
  60.     End If
  61. End Function
复制代码


人行道砖.zip

23.11 KB, 下载次数: 6

小计、合计函数错误

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-1 01:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不好意,匆忙了点忘记修改几个代码了

1、04行取消注释
2、05行有自定义代码直接注释就可以了

TA的精华主题

TA的得分主题

发表于 2016-4-1 07:02 | 显示全部楼层
你的Cells及Range前面都沒有指定工作表,可能會因為被激活的工作表不是你要的工作表而出錯。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-1 17:41 | 显示全部楼层
phsu 发表于 2016-4-1 07:02
你的Cells及Range前面都沒有指定工作表,可能會因為被激活的工作表不是你要的工作表而出錯。

那……能指定让函数在指定工作表运行呢

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-1 17:48 | 显示全部楼层
phsu 发表于 2016-4-1 07:02
你的Cells及Range前面都沒有指定工作表,可能會因為被激活的工作表不是你要的工作表而出錯。

本来想用R1C1格式计算的但VBA好像不能用

TA的精华主题

TA的得分主题

发表于 2016-4-1 22:38 | 显示全部楼层
若處理的單元格都在Sheet1,則將所有Cells及Range都更改如下:

If Sheet1.Cells(i, Y) = "合计" Then

小计 = Application.WorksheetFunction.Subtotal(109, Sheet1.Range(Chr(64 + Z) & D & ":" & Chr(64 + Z) & x - 1))

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-1 23:00 | 显示全部楼层
phsu 发表于 2016-4-1 22:38
若處理的單元格都在Sheet1,則將所有Cells及Range都更改如下:

If Sheet1.Cells(i, Y) = "合计" Then

不能指定在某个工作表,只能指定在函数所在的工作表进行

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-21 22:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
3年时间了,还是没人回复,自己顶一下,希望有人能解决

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-21 22:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
最近新编了一段金额大写的代码(心得而已,个人想法),使用多种场合
带原始数据\带数字小写\带原始计算式\原始数据放到方括号内

各位大佬看看有修改的么

  1. Function 大写(Y, Optional 格式 As String = 5) ' 金额大写
  2.     If Y = "" Then 大写 = "": Exit Function
  3.     C = Y: C = 去字符(C, "方括号"): C = 去字符(C, "空格"): C = 去字符(C, "中文"): C = 去字符(C, "字母"): Y = C
  4.     On Error Resume Next '忽略代码错误
  5.     Dim x As Currency
  6.     x = 计算(Y, 2)
  7.     With Application.WorksheetFunction
  8. '-----------------------------------------------------------------
  9. '   格式形式
  10.     Select Case 格式
  11.     Case 0
  12.         x = .Round(x, 0)
  13.         前缀 = .Text(x, "0.00元(大写:")
  14.         后缀 = ")"
  15.     Case 10
  16.         x = Round(x, 0)
  17.         后缀 = .Text(x, """[""0.00元]")
  18.     Case 100
  19.         x = Round(x, 0)
  20.         A = .IsError(Y * 1)
  21.         Select Case A
  22.         Case ""
  23.         前缀 = Y & "=" & .Text(x, "0.00元(大写:")
  24.         Case Else
  25.         前缀 = .Text(x, "0.00元(大写:")
  26.         End Select
  27.         后缀 = ")"
  28.     Case 110
  29.         x = Round(x, 0)
  30.         A = .IsError(Y * 1)
  31.         Select Case A
  32.         Case ""
  33.         后缀 = "[" & Y & "=" & .Text(x, "0.00元]")
  34.         Case Else
  35.         后缀 = .Text(x, """[""0.00元]")
  36.         End Select
  37.     Case 1
  38.         前缀 = .Text(x, "0.00元(大写:")
  39.         后缀 = ")"
  40.     Case 11
  41.         后缀 = .Text(x, """[""0.00元]")
  42.     Case 101
  43.         A = .IsError(Y * 1)
  44.         Select Case A
  45.         Case ""
  46.         前缀 = Y & "=" & .Text(x, "0.00元(大写:")
  47.         Case Else
  48.         前缀 = .Text(x, "0.00元(大写:")
  49.         End Select
  50.         后缀 = ")"
  51.     Case 111
  52.         A = .IsError(Y * 1)
  53.         Select Case A
  54.         Case ""
  55.         后缀 = "[" & Y & "=" & .Text(x, "0.00元]")
  56.         Case Else
  57.         后缀 = .Text(x, """[""0.00元]")
  58.         End Select
  59.     Case 2
  60.         A = .IsError(Y * 1)
  61.         Select Case A
  62.         Case ""
  63.         前缀 = "[" & Y & "=" & .Text(x, "0.00元](大写:")
  64.         Case Else
  65.         前缀 = .Text(x, """[""0.00元](大写:")
  66.         End Select
  67.         后缀 = ")"
  68.     End Select
  69. '-----------------------------------------------------------------
  70. '   空值情况
  71.     If x = 0 Then 大写 = 前缀 & "零元" & 后缀: Exit Function
  72. '-----------------------------------------------------------------
  73. '       判断正负数
  74.         If x < 0 Then 正负 = "负"
  75.         B = Abs(x)
  76. '-----------------------------------------------------------------
  77. '       零元表达
  78.         If x = 0 Then 大写 = 前缀 & "零元" & 后缀: Exit Function
  79. '-----------------------------------------------------------------
  80. '       整数表达
  81.         If Int(x) = x Then 大写 = 前缀 & 正负 & .Text(Int(B), "[DBNUM2]") & "元整" & 后缀: Exit Function
  82. '-----------------------------------------------------------------
  83. '       小数表达
  84.      大写 = 前缀 & 正负 _
  85.                         & .Text(Int(B), "[DBNUM2]") & "元" _
  86.     & .Text(Left(Right(B * 100, 2), 1), "[DBNUM2]") & "角" _
  87.              & .Text(Right(B * 100, 1), "[DBNUM2]") & "分" _
  88.                                                             & 后缀
  89.     End With
  90. End Function
复制代码

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

本版积分规则

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

GMT+8, 2024-3-28 23:17 , Processed in 0.047359 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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