看板 Office 關於我們 聯絡資訊
軟體: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
newacc: 想到的方式是把A1值先存到一個全域變數裡 11/15 21:41
newacc: 觸發Worksheet_Change後判斷A1.Value是否相同 11/15 21:41
newacc: 相同不做事,不同的話先更新全域變數再call巨集 11/15 21:42
xxyyzzxyz627: 謝謝newacc 我現在就是碰到a1儲存格變動時不會觸法 11/15 21:48
xxyyzzxyz627: 具集 11/15 21:48
soyoso: 是巨集,不是具集,另外觸"發" 11/15 21:50
soyoso: n大所回文,會於儲存格a1變動時觸發巨集 11/15 21:51
soyoso: 因為worksheet_change時判斷a1和先前將a1寫入變數的值是否 11/15 21:52
soyoso: 相同,不同就call 程序 11/15 21:53
xxyyzzxyz627: Private Sub Worksheet_Change(ByVal Target As Ran 11/15 21:58
xxyyzzxyz627: ge) 11/15 21:58
xxyyzzxyz627: If Target.Address = "$A$1" Then 11/15 21:58
xxyyzzxyz627: Call LINE1 11/15 21:58
xxyyzzxyz627: End If 11/15 21:58
xxyyzzxyz627: End Sub 11/15 21:58
xxyyzzxyz627: 我現在的寫法是這樣可以請問如何修改嗎 謝謝 11/15 21:58
soyoso: 先宣告個全域變數,在模組內 11/15 21:59
soyoso: 判斷if 儲存格a1 <> 全域變數 then 11/15 22:00
soyoso: 全域變數=儲存格a1 11/15 22:01
soyoso: call 程序 11/15 22:01
soyoso: end if 11/15 22:01
soyoso: workbook_open觸發時就,全域變數=儲存格a1的值 11/15 22:02
xxyyzzxyz627: 我現在卡住的地方 是我a1的儲存格是用公式 但公式 11/15 22:08
xxyyzzxyz627: 的變動讓儲存格的值變動 無法觸法Worksheet _Change 11/15 22:08
soyoso: 是的,這篇的回文就是在解決a1儲存格用公式且觸"發" 11/15 22:09
soyoso: 再次提醒是觸"發"不是觸"法" 11/15 22:10
soyoso: 如 https://i.imgur.com/wn3zsBJ.gifv 11/15 22:14
soyoso: a1為公式(以內文公式),b1為1或非1時觸發(測試是以msgbox) 11/15 22:15
soyoso: 但當a1已是空字串,而更改b1為非1的值時,因為a1會和全域 11/15 22:17
soyoso: 變數來判斷都是空字串,所以就不觸發 11/15 22:17
soyoso: 因此回文方面是符合a1公式的變動讓儲存格值變動而執行接下 11/15 22:19
soyoso: 來call 程序的動作 11/15 22:19
xxyyzzxyz627: 抱歉我用一樣的方法還是不行可以請你看一下嗎 謝謝 11/15 22:26
soyoso: 將巨集貼到回文或內文看看 11/15 22:29
xxyyzzxyz627: https://reurl.cc/GkGrVv 謝謝 11/15 22:31
xxyyzzxyz627: 上面是檔案的縮網址感謝你 11/15 22:32
soyoso: 回文21:59~22:02的部分,原po都沒有做 11/15 22:34
soyoso: 和target.address都沒有關係了 11/15 22:35
xxyyzzxyz627: 抱歉因為那個 我不懂 不好意思 11/15 22:36
soyoso: 目的是該工作表任何一個儲存格變動觸發worksheet_change時 11/15 22:37
soyoso: 就判斷先前a1寫入全域變數的值和觸發後a1的值是否有改變 11/15 22:38
soyoso: 而非去判斷所觸發儲存格target位置字串range.address是否 11/15 22:40
soyoso: "a1" 11/15 22:41
xxyyzzxyz627: 可以請問這樣怎麼寫嗎? 我不太懂 11/15 22:41
soyoso: 1.先在模組內宣告個全域變數。已存在模組或新增模組內都可 11/15 22:42
xxyyzzxyz627: 因為我工作表 會接DDE資料 並不會手動 去變動 11/15 22:43
soyoso: 2.workbook_open內將該變數=a1,開啟時就將a1的值寫入 11/15 22:45
soyoso: 3.22:00~22:01的動作 11/15 22:45
soyoso: if range("a1") <> 變數名稱 then 11/15 22:46
soyoso: 變數名稱 = range("a1") 11/15 22:46
soyoso: call LINE1 11/15 22:47
soyoso: end if 11/15 22:47
soyoso: 變數型態就依實際宣告 11/15 22:48
xxyyzzxyz627: 太感謝你了 用好了謝謝 11/15 22:58