返回列表 上一主題 發帖

堆疊空間不足??

堆疊空間不足??

Sub RecordPrice()
Dim WR As Long
Dim I As Byte


If Range("E2") < 1 Then Exit Sub

WR = Range("A1").End(xlDown).Row + 1
If (WR = 3) Or _
   ((Second(Range("A2")) Mod 5) = 1) Then '總量有異動時才記錄..........................這個地方有寫錯嗎??還是要怎麼改比較好??
    Cells(WR, 1).Resize(, 4) = [A2:D2].Value
   End If
End Sub

執行程式後為什麼會瘋狂寫入,且出現堆疊空間不足呢??

回復 1# 藍天麗池
你一定是在WorkSheet_Change()內呼叫該 Sub
導致 : 改Cell值 > 觸發 Change > Call RecordPrice >改Cell值 > 觸發 Change 。。。

建議 :
WorkSheet_Change  Event前後分別加上,避免內部行為再次觸發該Event
Application.EnableEvents = False
...
Application.EnableEvents = True
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

回復 1# 藍天麗池
  1. WR = Range("A1").End(xlDown).Row + 1
複製代碼
請改成
  1. WR = Range("A" & Rows.Count).End(xlUp).Row + 1
複製代碼
試試看。

TOP

回復 2# stillfish00
S大你好小弟有兩個疑問跟你請教一下

1.我程式裡面沒有WorkSheet_Change(),
但有Private Sub Worksheet_Calculate()
        Application.EnableEvents = False.............所以是加在這邊
        Call RecordPrice
        Application.EnableEvents = True..............還有這邊嗎??
        End Sub

2.S大還沒說之前我是加在
Sub RecordPrice()
Dim WR As Long
Dim I As Byte


If Range("E2") < 1 Then Exit Sub

WR = Range("A1").End(xlDown).Row + 1
If (WR = 3) Or _
   ((Second(Range("A2")) Mod 5) = 1) Then
    Application.EnableEvents = False.................這邊
    Cells(WR, 1).Resize(, 4) = [A2:D2].Value
   Application.EnableEvents = True...................還有這邊
   End If
End Sub

我加完後就可以執行了,請教S大我第一個家的地方對嗎??如果對,那跟第二個加的地方執行起來會有什麼不同呢?

TOP

回復 3# c_c_lai

C大測試後一樣堆疊空間不足,我昨天是用2#的方法,用Application.EnableEvents去解決的,但是對於加在那裡不是很清楚,C大可以看看4#再給我一些意見

TOP

回復 5# 藍天麗池
你應該請教 stillfish00 大大的。
  1. Sub RecordPrice()
  2.     Dim WR As Long
  3.     Dim I As Byte

  4.     If Range("E2") < 1 Then Exit Sub
  5.     Application.EnableEvents = False
  6.     .
  7.     .
  8.     .
  9.     Application.EnableEvents = True
  10. End Sub
複製代碼

TOP

回復 6# c_c_lai

C大我也有請教他,另外
Private Sub Worksheet_Calculate()
        Application.EnableEvents = False.............所以是加在這邊
        Call RecordPrice
        Application.EnableEvents = True..............還有這邊嗎??
        End Sub
..............................................................................................................................................................................

Sub RecordPrice()
Dim WR As Long
Dim I As Byte


If Range("E2") < 1 Then Exit Sub

WR = Range("A1").End(xlDown).Row + 1
If (WR = 3) Or _
   ((Second(Range("A2")) Mod 5) = 1) Then
    Application.EnableEvents = False.................這邊
    Cells(WR, 1).Resize(, 4) = [A2:D2].Value
   Application.EnableEvents = True...................還有這邊
   End If
End Sub

加在上面這兩個地方有甚麼不同??

TOP

回復 7# 藍天麗池
你自己先測試觀察有何差異?
答案是一樣的。
差別僅在於你洗澡時將換洗衣服放在臥室與事先拿進浴室
有何差別?

TOP

回復 8# c_c_lai


    C大我了解了

TOP

Private Sub Worksheet_Calculate()
Application.EnableEvents = False
Call RecordPrice
Application.EnableEvents = True
End Sub

有人進教室時
全體起立
敬禮
全體坐下
================================
Private Sub Worksheet_Calculate()
If 條件判斷 = True Then
 Application.EnableEvents = False
 Call RecordPrice
 Application.EnableEvents = True
End If
有人進教室時
如果進來的是老師
全體起立
敬禮
全體坐下
End Sub

假設進來的有100個人次,而老師只有5人,試想看看兩種狀況差別多少??? 
 
 

TOP

        靜思自在 : 待人退一步,愛人寬一寸,就會活得很快樂。
返回列表 上一主題