![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 疑難雜症區
(https://www.pcdvd.com.tw/forumdisplay.php?f=34)
- - 請教Excel VBA是卡在哪?
(https://www.pcdvd.com.tw/showthread.php?t=1079447)
|
---|
請教Excel VBA是卡在哪?
請教目前有A、B、C&D四欄
在C欄或D欄填入數值時,A欄會抓取C或D末5位數值,優先抓C的值。 Private Sub Worksheet_Change(ByVal Target As Range) Dim number As String If Range("c" & Target.Row).Value <> "" Then number = Right(Range("c" & Target.Row), 5) Range("a" & Target.Row).Value = number Else: number = Right(Range("D" & Target.Row), 5) Range("a" & Target.Row).Value = number End If End Sub 可當寫入C或D時,整個EXCEL就停住。進入偵錯 Private Sub Worksheet_Change(ByVal Target As Range)<=亮黃色 這該如何修改? |
用個變數i 記一下是不是Worksheet_Change 無窮迴圈
看起來是在裡面update value 又trigger 一次Worksheet_Change... |
真的是在無迴圈,可我不知道該如何解決
|
在對A賦值的同時會再次觸發Worksheet_Change事件
把主要程序寫到 sub op() (然後call sub 方式執行主要程序 目地是保正Target.Row是固定的 你要的) 開頭補上布林變數 now_exe=1 主要程序結束後 用Select 歸位 Target cell 布林變數 now_exe=0 在Worksheet_Change 裡做個可否執行 call sub 的判別 If(now_exe =0) then call op(target) 在開起excel 事件中設定 布林變數Now_go =0 |
這個布林變數Now_go =0 用意是?
|
事件觸發後 Application.EnableEvents = False
處理完後再 Application.EnableEvents = True |
耶....把DW1943建議放進去就可以了,可不知道tp34x大的方法哪個好?
Private Sub Worksheet_Change(ByVal target As Range) Dim number As String Application.EnableEvents = False If Range("c" & target.Row).Value <> "" Then number = Right(Range("c" & target.Row), 5) Cells(target.Row, "a").Value = number ElseIf Range("D" & target.Row).Value <> "" Then number = Right(Range("D" & target.Row), 5) Cells(target.Row, "a").Value = number End If Application.EnableEvents = True End Sub |
所有的時間均為GMT +8。 現在的時間是07:01 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。