ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何修改代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-10-15 16:58 | 显示全部楼层 |阅读模式
本帖最后由 ntyyz 于 2018-10-15 18:44 编辑

原代码是当“报表”表D1或者C1单元格变动时触发事件,D1和C1原来是下拉选择,代码能触发事件动作。
现在D1和C1改成根据“数据”表B3用公式提取日期数值,原代码已不能触发事件动作,要改成根据单元格数值变化触发事件动作才行,如何修改?
拷贝的是日期变更后的数据,原代码拷贝的是日期变更前的数据。
条件单元格输入更改数值,或者下拉选择更改单元格数值,事件触发就能运作,数据履盖粘贴上去,虽然数值更改了但就是不触发事件动作。

统计表.rar

83.66 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2018-10-15 17:11 | 显示全部楼层
多简单,Change事件卸载“数据”表里不就得了,简单有效

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-15 18:11 来自手机 | 显示全部楼层
Mapleaf12138 发表于 2018-10-15 17:11
多简单,Change事件卸载“数据”表里不就得了,简单有效

没看懂,麻烦老师改一下。

TA的精华主题

TA的得分主题

发表于 2018-10-15 19:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ntyyz 发表于 2018-10-15 18:11
没看懂,麻烦老师改一下。

就是把你的代码写到Sheet3的Change事件里面不就行了么

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-15 19:17 来自手机 | 显示全部楼层
Mapleaf12138 发表于 2018-10-15 19:05
就是把你的代码写到Sheet3的Change事件里面不就行了么

试过,不行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-15 22:28 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-10-16 09:43 | 显示全部楼层
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim ws As Worksheet
  3.     If Target.Address(0, 0) = "B3" Then
  4.         Set ws = Sheets("报表")
  5.         arr = ws.[B3:I6]
  6.         With Sheets("全月报表汇总")
  7.             For j = 3 To .Cells(Rows.Count, 1).End(3).Row
  8.                 If Val(ws.[d1]) = Val(.Cells(j, 1)) Then
  9.                     For i = 1 To UBound(arr)
  10.                         c = (i - 1) * 8 + 1
  11.                         For k = 1 To UBound(arr, 2)
  12.                             .Cells(j, c + k) = arr(i, k)
  13.                         Next k
  14.                     Next i
  15.                     Exit For
  16.                 End If
  17.             Next j
  18.         End With
  19.     End If
  20. End Sub
复制代码

看到你的D1虽然是些的公式,但是值也是引用的$B$3这个绝对位置的值,所以把带代码换到Sheet3的Change事件里,B3变化是触发事件。上面是代码,可以通过,不知道是不是你要的,大概是这个意思

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-16 10:07 | 显示全部楼层
Mapleaf12138 发表于 2018-10-16 09:43
看到你的D1虽然是些的公式,但是值也是引用的$B$3这个绝对位置的值,所以把带代码换到Sheet3的Change事 ...

这方法好,确实可行,Worksheet_Change事件只有对单元格进行操作起作用,对公式计算无效,听别人讲可以用Worksheet_Calculate事件,数值变化就能触发动作。
现在还有个问题,B3单元格单独改时间和单独粘贴新数值时间时,触发动作正常,我粘贴数值是履盖B3:R98,这样粘贴后不会触发动作,是什么原因?

TA的精华主题

TA的得分主题

发表于 2018-10-16 10:30 | 显示全部楼层
ntyyz 发表于 2018-10-16 10:07
这方法好,确实可行,Worksheet_Change事件只有对单元格进行操作起作用,对公式计算无效,听别人讲可以用 ...

B3:R98变化时,判断条件就不成立了,target.address不再试B3
Calculate事件没用过,网上看了下,可以参考这个:
https://zhidao.baidu.com/question/45873980.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-16 13:27 来自手机 | 显示全部楼层
Mapleaf12138 发表于 2018-10-16 10:30
B3:R98变化时,判断条件就不成立了,target.address不再试B3
Calculate事件没用过,网上看了下,可以参 ...

我把 If Target.Address(0, 0) = "B3" Then
改成 If Target.Address(0, 0) = "B3:R98" Then后,代码可以运行了,粘贴的区域只能是  "B3:R98" ,多了就不好运行了。
还有个问题请教一下,原代码拷贝的数据是老数据计算的结果,如何改成拷贝新日期的数据,就是粘贴数据后,报表当前计算结果拷贝到汇总对应表格里。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-17 02:56 , Processed in 0.038597 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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