PCDVD數位科技討論區

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)

fashionkid 2015-06-01 11:32 PM

請教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)<=亮黃色
這該如何修改?

globelin 2015-06-01 11:56 PM

用個變數i 記一下是不是Worksheet_Change 無窮迴圈
看起來是在裡面update value 又trigger 一次Worksheet_Change...

fashionkid 2015-06-02 12:18 AM

真的是在無迴圈,可我不知道該如何解決

tp34x 2015-06-02 08:55 AM

在對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

fashionkid 2015-06-02 12:42 PM

這個布林變數Now_go =0 用意是?

DW1943 2015-06-02 08:07 PM

事件觸發後 Application.EnableEvents = False
處理完後再 Application.EnableEvents = True

fashionkid 2015-06-03 12:37 AM

耶....把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。