Board logo

標題: 計算後自動刪除 [打印本頁]

作者: coafort    時間: 2023-2-16 10:00     標題: 計算後自動刪除

舉例
A1數字100
A2輸入50按下enter後自動清空A2數字
A3等於A1+A2的結果150
請問該如何寫呢?

謝謝大大
作者: Andy2483    時間: 2023-2-16 11:42

回復 1# coafort


    謝謝前輩發表此主題
後學建議vba觸發的方式

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
'↑如果觸發編輯儲存格位址是 ""$A$2""
   If IsNumeric([A1]) And IsNumeric([A2]) And [A2] <> "" Then
   '↑如果IsNumeric()判斷[A1]是數值,IsNumeric()判斷[A2]也數值,而且[A2]不是空字元
      [A3] = [A1] + [A2]: [A2] = ""
      '↑令[A3]儲存格值=[A1]儲存格值+[A2]儲存格值: 然後令[A2]儲存格值是空字元
   End If
End If
End Sub
作者: coafort    時間: 2023-2-16 13:23

回復  coafort


    謝謝前輩發表此主題
後學建議vba觸發的方式

Option Explicit
Private Sub Wo ...
Andy2483 發表於 2023-2-16 11:42

報告大大
沒作用
謝謝
作者: Andy2483    時間: 2023-2-16 14:07

回復 3# coafort


    謝謝前輩回復
上傳測試檔,請下載來試試看
[attach]35848[/attach]
作者: coafort    時間: 2023-2-16 14:59

回復  coafort


    謝謝前輩回復
上傳測試檔,請下載來試試看
Andy2483 發表於 2023-2-16 14:07



我搞錯了
應該是這樣
A1 100
A2 輸入50
A1會變成150
A2消失
真是不好意思
麻煩大大
謝謝大大
作者: Andy2483    時間: 2023-2-16 15:22

本帖最後由 Andy2483 於 2023-2-16 15:25 編輯

回復 5# coafort


    謝謝前輩再回復
請前輩將工作表模組下原來的程式碼換成 下列程式碼,然後再操作試試看

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
'↑如果觸發編輯儲存格位址是 ""$A$2""
   If IsNumeric([A1]) And IsNumeric([A2])  Then
   '↑如果IsNumeric()判斷[A1]是數值,IsNumeric()判斷[A2]也是數值
      Application.EnableEvents = False
      '↑令觸發失效
      [A1] = [A1] + [A2]: [A2] = ""
      '↑令[A1]儲存格值=[A1]儲存格值+[A2]儲存格值: 然後令[A2]儲存格值是空字元
      Application.EnableEvents = True
      '↑令恢復觸發
   End If
End If
End Sub
作者: coafort    時間: 2023-2-16 18:33

回復  coafort


    謝謝前輩再回復
請前輩將工作表模組下原來的程式碼換成 下列程式碼,然後再操作試 ...
Andy2483 發表於 2023-2-16 15:22


可以了
非常感謝大大
作者: coafort    時間: 2023-2-17 08:06

回復  coafort


    謝謝前輩回復
上傳測試檔,請下載來試試看
Andy2483 發表於 2023-2-16 14:07


請問大大
如果我有三個項目需要這種功能
請問要怎麼加入?
謝謝
作者: Andy2483    時間: 2023-2-17 09:15

回復 8# coafort


    謝謝前輩繼續一起學習
以下是編輯觸發 $A$2 ,$B$2 $B$2 的測試碼,請前輩試改成所符合需求的,或上傳範例

[attach]35850[/attach]


Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
'↑如果觸發編輯儲存格位址是 ""$A$2""
   If IsNumeric([A1]) And IsNumeric([A2]) Then
   '↑如果IsNumeric()判斷[A1]是數值,IsNumeric()判斷[A2]也是數值
      Application.EnableEvents = False
      '↑令觸發失效
      [A1] = [A1] + [A2]: [A2] = ""
      '↑令[A1]儲存格值=[A1]儲存格值+[A2]儲存格值: 然後令[A2]儲存格值是空字元
      Application.EnableEvents = True
      '↑令恢復觸發
   End If
End If
If Target.Address = "$B$2" Then
'↑如果觸發編輯儲存格位址是 ""$B$2""
   If IsNumeric([B1]) And IsNumeric([B2]) Then
      Application.EnableEvents = False
      [B1] = [B1] + [B2]: [B2] = ""
      Application.EnableEvents = True
   End If
End If
If Target.Address = "$C$2" Then
'↑如果觸發編輯儲存格位址是 ""$C$2""
   If IsNumeric([C1]) And IsNumeric([C2]) Then
      Application.EnableEvents = False
      [C1] = [C1] + [C2]: [C2] = ""
      Application.EnableEvents = True
   End If
End If
End Sub

祝順利! 美好的一天!
作者: coafort    時間: 2023-2-17 10:48

回復  coafort


    謝謝前輩繼續一起學習
以下是編輯觸發 $A$2 ,$B$2 $B$2 的測試碼,請前輩試改成所 ...
Andy2483 發表於 2023-2-17 09:15


非常感謝大大的幫忙
回應速度快速
程式精準
感恩
作者: 准提部林    時間: 2023-2-17 10:48

Private Sub Worksheet_Change(ByVal Target As Range)
With Target
     If .Count > 1 Or .Item(1) = "" Then Exit Sub
     If Not Intersect(Range("a3:c3"), .Cells) Is Nothing Then
        .Cells(-1, 1) = Val(.Cells(-1, 1)) + Val(.Value)
        .ClearContents
     End If
End With
End Sub

A3:C3 >> A1:C1
作者: Andy2483    時間: 2023-2-17 11:13

本帖最後由 Andy2483 於 2023-2-17 11:21 編輯

回復 11# 准提部林
回復 11# coafort


    謝謝前輩指導
1.後學在此主題沒有應用 http://forum.twbts.com/thread-23842-1-1.html 心得經驗,謝謝前輩指導
2.防止連續觸發不是只怕再觸發,也要懂得找出口,謝謝前輩
學習心得註解如下,請再指導,謝謝

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
'↑以下是關於儲存格編輯觸發的程序
     If .Count > 1 Or .Item(1) = "" Then Exit Sub
     '↑如果觸發格數量大於 1 或觸發格空白!就結束程式執行
     If Not Intersect(Range("a2:c2"), .Cells) Is Nothing Then
     '↑如果觸發格是在[A2:A2]儲存格裡??
        .Cells(0, 1) = Val(.Cells(0, 1)) + Val(.Value)
        '↑令觸發格的上方那格的值 + (觸發格值以Val 函數轉化回傳的數值)
        .ClearContents
        '↑清除觸發格的內容
        '此清除的程序再次的觸發了,但是 .Item(1) = "" 所以結束程式執行

     End If
End With
End Sub
作者: Andy2483    時間: 2023-2-18 08:42

回復 11# coafort


    建議使用 准提部林前輩的方法更方便擴充使用該功能的儲存格
在以下程式碼藍字部位修改,即可擴充或變更
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
     If .Count > 1 Or .Item(1) = "" Then Exit Sub
     If Not Intersect([A2:C2,G2:I2], .Cells) Is Nothing Then
        .Cells(0, 1) = Val(.Cells(0, 1)) + Val(.Value)
        .ClearContents
     End If
End With
End Sub
作者: coafort    時間: 2023-2-21 16:49

本帖最後由 coafort 於 2023-2-21 16:53 編輯
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
     If .Count > 1 Or .Item(1) = " ...
准提部林 發表於 2023-2-17 10:48


真是太感謝大大了
請問大大
我實際位置是
AQ212~AQ218及AQ212~AW218及BB221是輸入數值欄(觸發)
AR212~AR218及AX212~AX218及BC221是儲存格
請問要怎麼改呢?
謝謝大大
作者: coafort    時間: 2023-2-21 16:52

回復  coafort


    建議使用 准提部林前輩的方法更方便擴充使用該功能的儲存格
在以下程式碼藍字部位 ...
Andy2483 發表於 2023-2-18 08:42


真是太感謝大大了
請問大大
我實際位置是
AQ212~AQ218及AQ212~AW218及BB221是輸入數值欄(觸發)
AR212~AR218及AX212~AX218及BC221是儲存格
請問要怎麼改呢?
謝謝大大
作者: coafort    時間: 2023-2-21 19:34

本帖最後由 coafort 於 2023-2-21 19:37 編輯

打錯了

真是太感謝大大了
請問兩位大大
我實際位置是
AQ212~AQ218及AW212~AW218及BB221是輸入數值欄(觸發)
AR212~AR218及AX212~AX218及BC221是儲存格

我改成這樣
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
     If .Count > 1 Or .Item(1) = "" Then Exit Sub
     If Not Intersect([AQ212:AQ218,AW212:AW218,BB221], .Cells) Is Nothing Then
        .Cells(0, 1) = Val(.Cells(0, 1)) + Val(.Value)
        .ClearContents
     End If
End With
End Sub
但是出錯了
請問要怎麼改呢?
謝謝大大
作者: Andy2483    時間: 2023-2-22 07:35

本帖最後由 Andy2483 於 2023-2-22 08:04 編輯

回復 16# coafort


    謝謝前輩一起學習
請前輩再測試看看,謝謝
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
'↑以下是關於儲存格編輯觸發的程序
     If .Count > 1 Or .Item(1) = "" Then Exit Sub
     '↑如果觸發格數量大於 1 或觸發格的下方格是空白!就結束程式執行
     If Not Intersect([AQ212:AQ218,AW212:AW218,BB221], .Cells) Is Nothing Then
     '↑如果觸發格是在[A2:A2]儲存格裡??
        .Cells(1, 2) = Val(.Cells(1, 2)) + Val(.Cells(1, 1))
       '↑令觸發格的右邊那1格的值 + (觸發格值以Val 函數轉化回傳的數值)
        
        '觸發格本身是.Cells(1,1), 右側1格是.Cells(1,2), 左側1格是.Cells(1,0),
        '上方1格是.Cells(0,1), 下方1格是.Cells(2,1)

        
        .ClearContents
        '↑清除觸發格的內容
        '此清除的程序再次的觸發了,但是 .Item(1) = "" 所以結束程式執行
     End If
End With
End Sub
Option Explicit
作者: coafort    時間: 2023-2-22 14:27

回復  coafort


    謝謝前輩一起學習
請前輩再測試看看,謝謝
Option Explicit
Private Sub Worksh ...
Andy2483 發表於 2023-2-22 07:35


感謝大大
可以用了
對了
大大最後一行多了一個Option Explicit
作者: Andy2483    時間: 2023-2-22 14:36

回復 18# coafort


    恭喜前輩
最後一行多了一個Option Explicit:
漏刪的,Option Explicit是用來檢測變數是否都做了宣告
謝謝前輩,請常一起學習!




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