[算表] 儲存格變動時執行具集

看板Office作者 (MrWUYUAN)時間5年前 (2019/11/15 21:02), 編輯推噓0(0054)
留言54則, 3人參與, 5年前最新討論串1/1
軟體:Excel 版本:2013 我本來使用Private Sub Worksheet_Change A1儲存格有變動時 Call 具集 我用手動變動A1時會call 具集 但我用條件式的情況下就不會call了 我A1=if(b1=1,1,””) 但用這方法就不會call具集了 請問有什麼辦法用條件式的情況下會執行具集 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.76.6.180 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1573822920.A.A97.html

11/15 21:41, 5年前 , 1F
想到的方式是把A1值先存到一個全域變數裡
11/15 21:41, 1F

11/15 21:41, 5年前 , 2F
觸發Worksheet_Change後判斷A1.Value是否相同
11/15 21:41, 2F

11/15 21:42, 5年前 , 3F
相同不做事,不同的話先更新全域變數再call巨集
11/15 21:42, 3F

11/15 21:48, 5年前 , 4F
謝謝newacc 我現在就是碰到a1儲存格變動時不會觸法
11/15 21:48, 4F

11/15 21:48, 5年前 , 5F
具集
11/15 21:48, 5F

11/15 21:50, 5年前 , 6F
是巨集,不是具集,另外觸"發"
11/15 21:50, 6F

11/15 21:51, 5年前 , 7F
n大所回文,會於儲存格a1變動時觸發巨集
11/15 21:51, 7F

11/15 21:52, 5年前 , 8F
因為worksheet_change時判斷a1和先前將a1寫入變數的值是否
11/15 21:52, 8F

11/15 21:53, 5年前 , 9F
相同,不同就call 程序
11/15 21:53, 9F

11/15 21:58, 5年前 , 10F
Private Sub Worksheet_Change(ByVal Target As Ran
11/15 21:58, 10F

11/15 21:58, 5年前 , 11F
ge)
11/15 21:58, 11F

11/15 21:58, 5年前 , 12F
If Target.Address = "$A$1" Then
11/15 21:58, 12F

11/15 21:58, 5年前 , 13F
Call LINE1
11/15 21:58, 13F

11/15 21:58, 5年前 , 14F
End If
11/15 21:58, 14F

11/15 21:58, 5年前 , 15F
End Sub
11/15 21:58, 15F

11/15 21:58, 5年前 , 16F
我現在的寫法是這樣可以請問如何修改嗎 謝謝
11/15 21:58, 16F

11/15 21:59, 5年前 , 17F
先宣告個全域變數,在模組內
11/15 21:59, 17F

11/15 22:00, 5年前 , 18F
判斷if 儲存格a1 <> 全域變數 then
11/15 22:00, 18F

11/15 22:01, 5年前 , 19F
全域變數=儲存格a1
11/15 22:01, 19F

11/15 22:01, 5年前 , 20F
call 程序
11/15 22:01, 20F

11/15 22:01, 5年前 , 21F
end if
11/15 22:01, 21F

11/15 22:02, 5年前 , 22F
workbook_open觸發時就,全域變數=儲存格a1的值
11/15 22:02, 22F

11/15 22:08, 5年前 , 23F
我現在卡住的地方 是我a1的儲存格是用公式 但公式
11/15 22:08, 23F

11/15 22:08, 5年前 , 24F
的變動讓儲存格的值變動 無法觸法Worksheet _Change
11/15 22:08, 24F

11/15 22:09, 5年前 , 25F
是的,這篇的回文就是在解決a1儲存格用公式且觸"發"
11/15 22:09, 25F

11/15 22:10, 5年前 , 26F
再次提醒是觸"發"不是觸"法"
11/15 22:10, 26F

11/15 22:14, 5年前 , 27F

11/15 22:15, 5年前 , 28F
a1為公式(以內文公式),b1為1或非1時觸發(測試是以msgbox)
11/15 22:15, 28F

11/15 22:17, 5年前 , 29F
但當a1已是空字串,而更改b1為非1的值時,因為a1會和全域
11/15 22:17, 29F

11/15 22:17, 5年前 , 30F
變數來判斷都是空字串,所以就不觸發
11/15 22:17, 30F

11/15 22:19, 5年前 , 31F
因此回文方面是符合a1公式的變動讓儲存格值變動而執行接下
11/15 22:19, 31F

11/15 22:19, 5年前 , 32F
來call 程序的動作
11/15 22:19, 32F

11/15 22:26, 5年前 , 33F
抱歉我用一樣的方法還是不行可以請你看一下嗎 謝謝
11/15 22:26, 33F

11/15 22:29, 5年前 , 34F
將巨集貼到回文或內文看看
11/15 22:29, 34F

11/15 22:31, 5年前 , 35F
11/15 22:31, 35F

11/15 22:32, 5年前 , 36F
上面是檔案的縮網址感謝你
11/15 22:32, 36F

11/15 22:34, 5年前 , 37F
回文21:59~22:02的部分,原po都沒有做
11/15 22:34, 37F

11/15 22:35, 5年前 , 38F
和target.address都沒有關係了
11/15 22:35, 38F

11/15 22:36, 5年前 , 39F
抱歉因為那個 我不懂 不好意思
11/15 22:36, 39F

11/15 22:37, 5年前 , 40F
目的是該工作表任何一個儲存格變動觸發worksheet_change時
11/15 22:37, 40F

11/15 22:38, 5年前 , 41F
就判斷先前a1寫入全域變數的值和觸發後a1的值是否有改變
11/15 22:38, 41F

11/15 22:40, 5年前 , 42F
而非去判斷所觸發儲存格target位置字串range.address是否
11/15 22:40, 42F

11/15 22:41, 5年前 , 43F
"a1"
11/15 22:41, 43F

11/15 22:41, 5年前 , 44F
可以請問這樣怎麼寫嗎? 我不太懂
11/15 22:41, 44F

11/15 22:42, 5年前 , 45F
1.先在模組內宣告個全域變數。已存在模組或新增模組內都可
11/15 22:42, 45F

11/15 22:43, 5年前 , 46F
因為我工作表 會接DDE資料 並不會手動 去變動
11/15 22:43, 46F

11/15 22:45, 5年前 , 47F
2.workbook_open內將該變數=a1,開啟時就將a1的值寫入
11/15 22:45, 47F

11/15 22:45, 5年前 , 48F
3.22:00~22:01的動作
11/15 22:45, 48F

11/15 22:46, 5年前 , 49F
if range("a1") <> 變數名稱 then
11/15 22:46, 49F

11/15 22:46, 5年前 , 50F
變數名稱 = range("a1")
11/15 22:46, 50F

11/15 22:47, 5年前 , 51F
call LINE1
11/15 22:47, 51F

11/15 22:47, 5年前 , 52F
end if
11/15 22:47, 52F

11/15 22:48, 5年前 , 53F
變數型態就依實際宣告
11/15 22:48, 53F

11/15 22:58, 5年前 , 54F
太感謝你了 用好了謝謝
11/15 22:58, 54F
文章代碼(AID): #1Tpg78gN (Office)
文章代碼(AID): #1Tpg78gN (Office)