Board logo

標題: 請問版上對change事件很熟的大大 [打印本頁]

作者: 藍天麗池    時間: 2013-7-12 11:10     標題: 請問版上對change事件很熟的大大

本帖最後由 藍天麗池 於 2013-7-12 11:11 編輯

Private Sub Worksheet_Change(ByVal Target As Range)
'Application.EnableEvents = False

If Not Intersect(Target, [E1:G50000]) Is Nothing Then Exit Sub
Range("H" & Target.Row).Formula = "=RC[-1]+RC[-2]"

'Application.EnableEvents = True
End Sub

執行上述的程式會出現錯誤28 堆疊空間不足

如果要將上述程式改成E到G欄有變動才變動,其他欄變動則不執行要怎麼改,求教板上大大
作者: stillfish00    時間: 2013-7-12 11:56

回復 1# 藍天麗池
H欄可以預先填好公式,不須另外寫VBA處理。
作者: 藍天麗池    時間: 2013-7-12 13:07

回復 2# stillfish00


    大大,就是不行所以才用VBA的發方式阿
作者: GBKEE    時間: 2013-7-12 16:28

本帖最後由 GBKEE 於 2013-7-13 07:54 編輯

回復 1# 藍天麗池
拿掉註解
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Application.EnableEvents = False
  3.     If Not Intersect(Target, [E1:G50000]) Is Nothing Then
  4.         Application.EnableEvents = True   '回復:物件能觸發事件
  5.         Exit Sub
  6.     End If
  7.     Range("H" & Target.Row).Formula = "=RC[-1]+RC[-2]"
  8.     Application.EnableEvents = True
  9. End Sub
複製代碼

作者: stillfish00    時間: 2013-7-12 18:20

本帖最後由 stillfish00 於 2013-7-12 18:23 編輯

回復 3# 藍天麗池
公式不行的原因是?
手動輸入值公式也不會跟著運算嗎?
有沒有檢查過公式自動運算是否改成了手動?

我只是好奇怎麼做到你說的這種狀況,因為code裡面也是去改公式而已。
然後你程式的判斷和中文敘述的相反了
作者: 藍天麗池    時間: 2013-7-12 20:35

回復 4# GBKEE


    G大,拿掉註解就,其他儲存格變動還是會計算,能改成E到G欄變動才變動,其他欄變動則不變動嗎??
作者: 藍天麗池    時間: 2013-7-12 20:40

回復 5# stillfish00


    那如果以我中文的意思這程式要怎麼改??
作者: GBKEE    時間: 2013-7-13 08:00

回復 6# 藍天麗池
  1. Option Explicit
  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.     Application.EnableEvents = False
  4.     If Not Intersect(Target, [E1:E50000]) Is Nothing Or Not Intersect(Target, [G1:G50000]) Is Nothing Then
  5.         Range("H" & Target.Row).Formula = "=RC[-1]+RC[-2]"
  6.     End If
  7.     Application.EnableEvents = True
  8. End Sub
複製代碼

作者: 藍天麗池    時間: 2013-7-13 11:25

回復 8# GBKEE


    G大感謝你,測試已經可以用了,感謝
作者: 藍天麗池    時間: 2013-7-16 14:05

回復 8# GBKEE


    G大,再跟你請教一個問題
    Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Not Intersect(Target, [E1:E50000]) Is Nothing Or Not Intersect(Target, [G1:G50000]) Is Nothing Then
        Range("H" & Target.Row).Formula = "=RC[-1]+RC[-2]"
    End If
    Application.EnableEvents = True
End Sub

如果以上程式,在H欄部分我要他在儲存格計算完之後寫入的是值,而不是公式,請問一下G大程式要怎麼改,麻煩你了
作者: GBKEE    時間: 2013-7-16 15:08

回復 10# 藍天麗池
  1. Option Explicit
  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.     Application.EnableEvents = False
  4.     If Not Intersect(Target, [E1:E50000]) Is Nothing Or Not Intersect(Target, [G1:G50000]) Is Nothing Then
  5.       ' Range("H" & Target.Row).Formula = "=RC[-1]+RC[-2]"
  6.          With Range("H" & Target.Row)
  7.             ' .Formula = "=RC[-1]+RC[-2]" ' =>  .Value = "=RC[-1]+RC[-2]"
  8.             .Value = .Offset(0, -1) + .Offset(0, -2)
  9.             'RC[-1] => .Offset(0, -1)
  10.             'RC[-2] => .Offset(0, -2)
  11.         End With
  12.     End If
  13.     Application.EnableEvents = True
  14. End Sub
複製代碼

作者: 藍天麗池    時間: 2013-7-16 15:57

本帖最後由 藍天麗池 於 2013-7-16 15:59 編輯

回復 11# GBKEE


    G大,抱歉小弟才疏學淺,可以請G大說明一下嗎??
    城市裡面太多這個',我不知道要怎麼看,哪些是要的哪些是不需要的??
作者: luhpro    時間: 2013-7-17 22:35

回復 10# 藍天麗池
這裡提供另外一個方法來實現 :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.   Application.EnableEvents = False
  3.    
  4.   With Target
  5.     If .Row < 50001 Then
  6.       Select Case .Column
  7.       Case 5 To 7
  8.         .Parent.Cells(.Row, 8) = .Offset(0, -1) + .Offset(0, -2)
  9.       End Select
  10.     End If
  11.   End With
  12.   
  13.   Application.EnableEvents = True
  14. End Sub
複製代碼

作者: GBKEE    時間: 2013-7-18 06:07

回復 12# 藍天麗池
太多這個'

這是VBA的注解符號
作者: 藍天麗池    時間: 2013-7-18 20:34

回復 13# luhpro


    感謝大大我知道了




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)