作者xxyyzzxyz627 (MrWUYUAN)
看板Office
标题[算表] 储存格变动时执行具集
时间Fri Nov 15 21:01:58 2019
软体:Excel
版本:2013
我本来使用Private Sub Worksheet_Change
A1储存格有变动时
Call 具集
我用手动变动A1时会call 具集
但我用条件式的情况下就不会call了
我A1=if(b1=1,1,””) 但用这方法就不会call具集了
请问有什麽办法用条件式的情况下会执行具集
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.76.6.180 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1573822920.A.A97.html
1F:→ newacc: 想到的方式是把A1值先存到一个全域变数里 11/15 21:41
2F:→ newacc: 触发Worksheet_Change後判断A1.Value是否相同 11/15 21:41
3F:→ newacc: 相同不做事,不同的话先更新全域变数再call巨集 11/15 21:42
4F:→ xxyyzzxyz627: 谢谢newacc 我现在就是碰到a1储存格变动时不会触法 11/15 21:48
5F:→ xxyyzzxyz627: 具集 11/15 21:48
6F:→ soyoso: 是巨集,不是具集,另外触"发" 11/15 21:50
7F:→ soyoso: n大所回文,会於储存格a1变动时触发巨集 11/15 21:51
8F:→ soyoso: 因为worksheet_change时判断a1和先前将a1写入变数的值是否 11/15 21:52
9F:→ soyoso: 相同,不同就call 程序 11/15 21:53
10F:→ xxyyzzxyz627: Private Sub Worksheet_Change(ByVal Target As Ran 11/15 21:58
11F:→ xxyyzzxyz627: ge) 11/15 21:58
12F:→ xxyyzzxyz627: If Target.Address = "$A$1" Then 11/15 21:58
13F:→ xxyyzzxyz627: Call LINE1 11/15 21:58
14F:→ xxyyzzxyz627: End If 11/15 21:58
15F:→ xxyyzzxyz627: End Sub 11/15 21:58
16F:→ xxyyzzxyz627: 我现在的写法是这样可以请问如何修改吗 谢谢 11/15 21:58
17F:→ soyoso: 先宣告个全域变数,在模组内 11/15 21:59
18F:→ soyoso: 判断if 储存格a1 <> 全域变数 then 11/15 22:00
19F:→ soyoso: 全域变数=储存格a1 11/15 22:01
20F:→ soyoso: call 程序 11/15 22:01
21F:→ soyoso: end if 11/15 22:01
22F:→ soyoso: workbook_open触发时就,全域变数=储存格a1的值 11/15 22:02
23F:→ xxyyzzxyz627: 我现在卡住的地方 是我a1的储存格是用公式 但公式 11/15 22:08
24F:→ xxyyzzxyz627: 的变动让储存格的值变动 无法触法Worksheet _Change 11/15 22:08
25F:→ soyoso: 是的,这篇的回文就是在解决a1储存格用公式且触"发" 11/15 22:09
26F:→ soyoso: 再次提醒是触"发"不是触"法" 11/15 22:10
28F:→ soyoso: a1为公式(以内文公式),b1为1或非1时触发(测试是以msgbox) 11/15 22:15
29F:→ soyoso: 但当a1已是空字串,而更改b1为非1的值时,因为a1会和全域 11/15 22:17
30F:→ soyoso: 变数来判断都是空字串,所以就不触发 11/15 22:17
31F:→ soyoso: 因此回文方面是符合a1公式的变动让储存格值变动而执行接下 11/15 22:19
32F:→ soyoso: 来call 程序的动作 11/15 22:19
33F:→ xxyyzzxyz627: 抱歉我用一样的方法还是不行可以请你看一下吗 谢谢 11/15 22:26
34F:→ soyoso: 将巨集贴到回文或内文看看 11/15 22:29
36F:→ xxyyzzxyz627: 上面是档案的缩网址感谢你 11/15 22:32
37F:→ soyoso: 回文21:59~22:02的部分,原po都没有做 11/15 22:34
38F:→ soyoso: 和target.address都没有关系了 11/15 22:35
39F:→ xxyyzzxyz627: 抱歉因为那个 我不懂 不好意思 11/15 22:36
40F:→ soyoso: 目的是该工作表任何一个储存格变动触发worksheet_change时 11/15 22:37
41F:→ soyoso: 就判断先前a1写入全域变数的值和触发後a1的值是否有改变 11/15 22:38
42F:→ soyoso: 而非去判断所触发储存格target位置字串range.address是否 11/15 22:40
43F:→ soyoso: "a1" 11/15 22:41
44F:→ xxyyzzxyz627: 可以请问这样怎麽写吗? 我不太懂 11/15 22:41
45F:→ soyoso: 1.先在模组内宣告个全域变数。已存在模组或新增模组内都可 11/15 22:42
46F:→ xxyyzzxyz627: 因为我工作表 会接DDE资料 并不会手动 去变动 11/15 22:43
47F:→ soyoso: 2.workbook_open内将该变数=a1,开启时就将a1的值写入 11/15 22:45
48F:→ soyoso: 3.22:00~22:01的动作 11/15 22:45
49F:→ soyoso: if range("a1") <> 变数名称 then 11/15 22:46
50F:→ soyoso: 变数名称 = range("a1") 11/15 22:46
51F:→ soyoso: call LINE1 11/15 22:47
52F:→ soyoso: end if 11/15 22:47
53F:→ soyoso: 变数型态就依实际宣告 11/15 22:48
54F:→ xxyyzzxyz627: 太感谢你了 用好了谢谢 11/15 22:58