excel表格,不自动更新结果,需要双击单元格,才更新结果,怎么办?

jyljb888 2019-07-10 04:37:02
excel单元格不自动刷新结果,需要双击单元格才能更新结果,牵扯到的功能在最下面的一个sub

链接:https://pan.baidu.com/s/1IXOwncMLfNswcnvLSOxGEw
提取码:0ija
复制这段内容后打开百度网盘手机App,操作更方便哦



[code=textOption Explicit

Const kFirstCol As Integer = 1
Const kLastCol As Integer = 4

Private Sub Worksheet_Change(ByVal Target As Range)
'On Error GoTo ErrorHandler
Dim rng As Range, rngIndex As Range
Dim i As Long

Set rng = Intersect(Target, Range("I:I"))
If Not rng Is Nothing Then
For Each rngIndex In rng
If rngIndex.formula Like "=SUM*" Then
rngIndex.Offset(0, 2) = "合计"
rngIndex.Offset(0, 2).Interior.Color = RGB(255, 255, 0)
ElseIf Cells(rngIndex.Row, "G") = "" Then
rngIndex.Offset(0, 2) = ""
rngIndex.Offset(0, 2).Interior.Pattern = xlNone
End If
Next

End If
Set rng = Nothing

Set rng = Intersect(Target, Range("G:G"))
If Not rng Is Nothing Then
For Each rngIndex In rng
EvalEx rngIndex
SetOthers rngIndex
Next
For Each rngIndex In rng
If Cells(rngIndex.Row, "L") <> "" Then
For i = 3 To Range("g" & Rows.Count).End(xlUp).Row
If Cells(i, "G") Like "*" & Cells(rngIndex.Row, "L") & "*" Then
EvalEx Cells(i, "G")
SetOthers Cells(i, "G")
End If
Next
End If
Next
End If
Set rng = Nothing

Set rng = Intersect(Target, Range("E:F"))
If Not rng Is Nothing Then
For Each rngIndex In rng
SetOthers rngIndex
Next
For Each rngIndex In rng
If Cells(rngIndex.Row, "L") <> "" Then
For i = 3 To Range("g" & Rows.Count).End(xlUp).Row
If Cells(i, "G") Like "*" & Cells(rngIndex.Row, "L") & "*" Then
EvalEx Cells(i, "G")
SetOthers Cells(i, "G")
End If
Next
End If
Next
End If
Set rng = Nothing



ErrorHandler:
End Sub

Sub SetOthers(rng As Range)
Dim thisRow As Long
Dim rngE As Range, rngF As Range, rngH As Range, rngI As Range

' 1、如果H3为空,则I3也为空
thisRow = rng.Row
If IsError(Range("H" & thisRow).Value) Then
Range("H" & thisRow).Value = ""
GoTo SubEnd
End If

If Range("H" & thisRow).Value = "" Then
Range("I" & thisRow).Value = ""
GoTo SubEnd
End If

Set rngE = Range("E" & thisRow)
Set rngF = Range("F" & thisRow)
Set rngH = Range("H" & thisRow)
Set rngI = Range("I" & thisRow)

' 2、如果E3为空,F3为空,则I3=H3
' 3、如果E3不为空,F3为空,则I3=E3*H3
' 4、如果E3为空,F3不为空,则I3=F3*H3
' 5、如果E3不为空,F3不为空,则I3=E3*F3*H3
If rngE.Value = "" And rngF.Value = "" Then
rngI.Value = rngH.Value
ElseIf rngE.Value <> "" And rngF.Value = "" Then
rngI.Value = rngE.Value * rngH.Value
ElseIf rngE.Value = "" And rngF.Value <> "" Then
rngI.Value = rngF.Value * rngH.Value
Else
rngI.Value = rngE.Value * rngF.Value * rngH.Value
End If

Set rngE = Nothing
Set rngF = Nothing
Set rngH = Nothing
Set rngI = Nothing

SubEnd:
End Sub

Sub EvalEx(rng As Range)
Dim formula As String
Dim arr As Variant
Dim i As Long

' On Error GoTo ErrorHandler
formula = rng.Value
If Trim(formula) = "" Then
rng.Offset(0, 1).Value = ""
Exit Sub
End If

' 替换中文符号为英文符号
formula = Replace(formula, "{", "{")
formula = Replace(formula, "}", "}")
formula = Replace(formula, "(", "(")
formula = Replace(formula, ")", ")")
formula = Replace(formula, "/", "/")

' 用正则把{*}所有字符替换为空(其实不用正则用查找替换功能也行)
With CreateObject("vbscript.regexp")
.Pattern = "\{([^\{]+)\}"
.Global = True
formula = .Replace(formula, "")
End With
' 用正则把
  • 所有字符替换为空
    With CreateObject
  • ("vbscript.regexp")
    .Pattern = "\[([^\[]+)\]"
    .Global = True
    formula = .Replace(formula, "")
    End With


    ' 变量改成实际数值,必须从最长字符串开始替换
    'arr = Range(Range("J2"), Range("K" & Range("K" & Rows.Count).End(xlUp).Row))
    arr = Range(Range("I3"), Range("L" & Range("L" & Rows.Count).End(xlUp).Row))
    SortArray arr
    For i = LBound(arr) To UBound(arr)
    'If arr(i, kLastCol) = "" Then Exit For
    formula = Replace(formula, arr(i, kLastCol), arr(i, kFirstCol))
    Next i

    ' 计算结果并写入对应的单元格
    rng.Offset(0, 1).Value = Evaluate(formula)



    ErrorHandler:
    End Sub

    Sub SortArray(arr As Variant)
    Dim i As Long, j As Long
    Dim temp As Variant
    Dim hasExchanged As Boolean



    For i = LBound(arr) To UBound(arr) - 1
    hasExchanged = False
    For j = i + 1 To UBound(arr)
    If Len(arr(i, kLastCol)) < Len(arr(j, kLastCol)) Then
    ' 交换变量名对应的数值
    temp = arr(i, 1)
    arr(i, 1) = arr(j, 1)
    arr(j, 1) = temp

    ' 交换变量名
    temp = arr(i, kLastCol)
    arr(i, kLastCol) = arr(j, kLastCol)
    arr(j, kLastCol) = temp

    hasExchanged = True
    End If
    Next j
    If Not hasExchanged Then Exit For
    Next i
    End Sub
    ]
...全文
1295 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
vansoft 2020-04-15
  • 打赏
  • 举报
回复
既然都写代码了,直接给单元格赋值好了。
milaoshu1020 2019-07-11
  • 打赏
  • 举报
回复
参考这个帖子:
https://bbs.csdn.net/topics/392371794
中的问题和13楼的回答;
milaoshu1020 2019-07-11
  • 打赏
  • 举报
回复
"如左边所示,代号列会自动引用对应的I列的结果,如果I列的结果是求和而来的,A+B不会自动更新结果,需要双击A+B所在单元格才行,如何修改代码,这个功能的代码在VBA最下面"

"代号列会自动引用对应的I列的结果",你说的代号列是哪一列?
"A+B不会自动更新结果",你说的结果在哪儿?
excel常用函数公式及技巧搜集 从身份证号码中提取出生年月日 从身份证号码中提取出性别 从身份证号码中进行年龄判断 按身份证号号码计算至今天年龄 以2006年10月31日为基准日,按按身份证计算年龄(周岁)的公式 按身份证号分男女年龄段 【年龄和工龄计算】 根据出生年月计算年龄 根据出生年月推算生肖 如何求出一个人到某指定日期的周岁? 计算距离退休年龄的公式 求工齡 计算工龄 年龄及工龄计算自动算出工龄日期格式为(yyyy.mm.dd) 【时间和日期应用】 自动显示当前日期公式 如何在单元格中自动填入当前日期 如何判断某日是否星期天 某个日期是星期几 什么函数可以显示当前星期 求本月天数 显示昨天的日期 关于取日期 如何对日期进行上、中、下旬区分 如何获取一个月的最大天数 日期格式转换公式 【排名及排序筛选】 一个具有11项汇总方式的函数SUBTOTAL 自动排序 按奇偶数排序 自动生成序号 如何自动标示A栏中的数字大小排序? 如何设置自动排序 重复数据得到唯一的排位序列 按字符数量排序 排序字母与数字的混合内容 随机排序 排序的问题 怎样才能让数列自动加数 一个排序问题 数字的自动排序,插入后不变? 根据规律的重复的姓名列产生自动序号 排名的函数 自动排名公式 百分比排名的公式写法为: 平均分及总分排名 求名次排名 排名次根据分数进行普通排名 对于普通排名分数相同时,按顺序进行不重复排名 依分数比高低名次成绩排名 美国式排名 中国式排名 求最精简的自动排名公式 排序后排名 位次排名 根据双列成绩进行共同排名 在双列间排名 等次排名 不等次排名(行小排先) 不等次排名(行大排先) 顺次排名 有并列排名 无并列排名 有并列分段排名 无并列分段排名 成绩排名 如何排名 数据排名(隔几行排名) 根据分数进行倒排名 倒数排名函数是什么 如何实现每日各车间产量的排名 分数相同时按照一科的分数进行排名 筛选后自动产生序列号并汇总 如何筛选奇数行 函数筛选姓名 名次筛选 如何实现快速定位(筛选出不重复值) 如何请在N列中列出A1:L9中每列都存在的数值 自动为性别编号的问题 【文本与页面设置】 EXCEL中如何删除*号 将字符串中的星号“*”替换为其它字符 去空格函数如何去掉字符和单元格里的空格 怎样快速去除表中不同行和列的空格 如何禁止输入空格 代替单元格中字符串 把单元格中的数字转变成为特定的字符格式 把有六百多个单元格的一列,变成一页的多列 将N列变M列公式归纳为 一列变四列 四列变一列 重复四次填充 多行数据排成一列 将单元格一列分为多列 首写字母大写 把单元格编号中的小写字母变成大写字母 让姓名左右对齐 数字居中而小数点又对齐 计算指定单元格编号组中非空单元格的数量 比较两个单元格内容是否一致 怎么样设置才能让这一列的每个单元格只能输入12位 如何让工作表奇数行背景是红色偶数行背景是蓝色 计算特定的一组单元格中,满足条件的单元格的个数 把文本格式的数字转换成真正的数字 设置页码 Excel表格里如何插入页码的? 如何设置页脚首页为第5页 表格的页脚问题 无拘无束的页眉 打印表头 Excel打印中如何不显示错误值符号 对于一些不可打印的字符的处理 用那个函数可将个位数前面的零值显示出来? 如果你要在A3的前面插入100行 请问如何每隔30行粘贴一新行 在工作表里有连续10行数据, 现在要每行间格2行 一个大表每一行下面需要加一行空行,怎么加最方便 Excel中插入空白行 快速删除工作表中的空行快速删除空行一次删完Excel里面多出很多的空白行 每30行为一页并加上一个标题如何实现如何实现隔行都加上标题项 如何把标签页去掉的? 去掉默认的表格线(网线)表格的框线 列标的标识变了 符号的意义 双击格式刷竟也能COPY文本(不是文本格式) 查找+格式刷的妙用 光标移动 最后一行为文本最后一行为数字 如何在EXCEL中快速定位最后一行数据 用SUN函数快速求和 在Excel中快速查看所有工作表公式 在Excel中设置行间距 怎样同时改变多行行高 快速换行 让文本换行 在Excel中行列快速转换 将原有列中的内容倒置过来 快速回到A1单元格 复制粘贴中回车键的妙用 一次选中批注单元格 一次在所有单位格中插入批注 在公式中插入批注 不连续单元格填充同一数据 空白行的填充 怎样用函数向下实现自动填充 怎么设置自动保存 避免输入网址和电子邮件地址时的超链接 单元格前面自动加了等号 加盖公章 查找+格式刷的妙用 Excel中鼠标双击妙用 Excel中快速定位的技巧实例 在Excel中插入Flash时钟的步骤 小写数字转换成人民币大写 轻轻松松制作超复杂Excel表头 【字符截取与增减】 截取单元格里某个字符后的字符 截取字符的公式 如何确定*号后的数字 如何提取数字中间的数 三个数中,如何取出中间那个 取数值后三位公式 取数函数 如何把单元格中的数字提取出来(字符串中不连续) 数字在字符串中不连续如何提取数字 用如何提取“-”前后的字符 怎样删去﹕后的文字 怎样只取“.”之后的文字﹖ 获取单元格内容中字符串 如何提取一串数字中的几位数字(字符) 如何把一个单元格中的数字挑出来 分割文本 按照给定的位数,截断小数点后的数字 单元格数字提取问题 以关键字提取名称 如何把文本中的前几个字符去除 对一列中的文字统一去掉最后一个字 讨如何去掉单元格中的第一个数字? 论一下取最后一个单词的方法 如何去掉单元格最后一位数字 如何在一列已经输入的数据前添加“p” 什么函数可以插入字符 如何在数据前添加“*”号 数字前面加上数字 【数据拆分与合并】 数字如何拆分 单元格中的数据拆分 单元格的拆分 如何拆分字组 用连字符“&”来合并文本怎样把不同格式不同位置的内容合并到一个单元格内 把不同单元格的内容合到一个单元格里 合并与拆分 合并不同单元格的内容 关于文字在表格中的组合 求拆解合并公式 如何把字母和数字分开? 把分散在各单元格的内容合在一个单元格中 多个工作表的单元格合并计算 【条件自定义格式】 通过条件格式将小计和总计的行设为不同的颜色 如何实现这样的条件格式 隔行不同字体颜色怎么设置 让不同类型数据用不同颜色显示 如何做这样的EXCEL表(颜色交叉) 条件格式 使用条件格式设置颜色条纹 相同数据的提示? 如何做到小于10显示二位小数,大于10显示一位小数 如何根据数值的正负加上“+”“-”符号 120,000显示为12.0 121,999显示为12.2 自定义单元格格式将单元格中的数全部变成万元表示 有何办法实现将一张表中的数据由元的单位转换为万元 常用的自定义格式 自定义格式 怎样定义格式 在工具按钮之间设置分隔线 自定义区域为每一页的标题 一个单元格内格式问题 定制单元格数字显示格式 巧用定位选条件单元格 工作表的标签的字体和大小可以更改吗 隔行用不同颜色显示,请问如何做 将单元格设置为有“凸出”的效果或“凹进去”的效果 在Excel中设计彩色数字 定义名称的妙处 零值问题 【汇总计算与统计】 个调税公式 算物价的函数 自动计算应收款滞纳金 淘汰率 应用公积金的一个函数 如何利用公式将数值转为百分比格式 比高得分公式 自动评定奖级 对带有单位的数据如何进行求和 对a列动态求和 动态求和公式 列的跳跃求和 有规律的隔行求和 如何实现奇数行或偶数行求和 单数行求和统计偶数单元格合计数值 隔行求和公式设置 隔列将相同项目进行求和 隔行或隔列加总 请问如何在一百行内做隔行相加 如何将间隔一定的列的数据相加呢 隔列求和(A、B列) 隔列求和的公式 隔列求和 关于隔行、隔列求和的问题 EXCEL中求两列的对应元素乘积之和 计算900~1000之间的数值之和 双条件求和 如何实现这样的条件求和 A1:A10数字显为文本格式时,如何求和 如何分班统计男女人数 统计数值大于等于80的单元格数目 计算出A1里有几个abc 有条件统计 如何统计各年龄段的数量 如何计算20-50岁的人数? 如何统计40-50岁的人的个数 要统计出7岁的女生人数 统计人数 如何统计A1:A10,D1:D10中的人数? 如何让EXCEL自动从头统计到当前单元格 统计人数 统计人数 求各分数段人数 有什么方法统计偶数 如何显示 工资统计中的问题 统计数据问题一例 根据给定的条件,对数据进行合计 十列数据合计成一列 统计汉字字符个数 关于取数 统计单元格内不为空的格数 自动将销量前十名的产品代号及销量填入表中 统计最大的连续次数3个“不重复”个数统计在一列有重复的姓名中,如何统计出具体有几人 计数的问题 不相同 如何分班统计男女人数 在几百几千个数据中发现重复项 统计互不相同的数据个数 多个工作表的单元格合并计算 单个单元格中字符统计 数据区包含某一字符的项的总和,该用什么公式 函数如何实现分组编码 【数值取整及进位】 取整数函数 数值取整 求余数的函数 四舍五入公式 对数字进行四舍五入 如何实现“见分进元” 四舍五入 如何四舍五入取两位小数 根据给定的位数,四舍五入指定的数值 四舍六入 如何实现2舍3入 怎么设置单元格以千元四舍五入 ROUND函数的四舍五入不进位的解决方法? 保留一位小数 如何三舍四入 另类四舍五入 想把小数点和后面的数字都去掉,不要四舍五入 求真正的四舍五入后的数 小数点进位 个位数归0或者归5 【大小值或中间值】 求平均值 如何实现求平均值时只对不等于零的数求均值? 平均分的问题 怎样求最大值(最小值或中间值)平均数怎么弄 去掉其中两个最大值和两个最小值的公式 去一行最高分最低分求平均值 在9个数值中去掉最高与最低然后求平均值 求最大值(n列) 如何实现求平均值时只对不等于零的数求均值? 得到单元格编号组中最大的数或最小的数 标记出3个最大最小值 取前五名,后五名的方法 如何用公式求出最大值所在的行? 求多个最高分 如何求多条件的平均值 想求出第三大之数值 【查询和查找引用】 查找顺序公式 怎样实现精确查询 查找及引用 查找函数的应用 怎么能方便的判断某个单元格中包含多少个指定的字符?如何用查找函数 日期查找的问题 如何自动查找相同单元格内容 查找函数怎样对号入座(查找) 一个文本查找的问题 查找一列中最后一个数值 查找重复字符 请教查找替换问题 IF函数替换法总结 查找的函数(查找末位词组) 怎样从原始数据中自动获取最后一个数据 两列数据查找相同值对应的位置 查找数据公式两个(基本查找函数为VLOOKUP,MATCH) 【输入数据的技巧】 谈谈Excel输入的技巧 一列中不输入重复数字 如果要查找重复输入的数字 单元格输入 大量0值输入超级技巧 如何在C列中输入工号在D列显示姓名 输入提示如何做 在信息输入前就给予提示 数据有效性

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧