自動累加的程式在儲存格合併後確不能用了
請教各位VBA高手,以下的程式是我工作用來做儲存格自動累加的,但因為表格做了一些改變,就是把儲存格合併成5合1,可是還是在我設的範圍內為什麼不能
用了呢?是不是要做部分的修改呢/願請各路VBA高手幫幫忙,謝謝!!
Private EhNum, EhChkPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)If Selection.Cells.Count > 1 Or EhChk Then Exit SubIf Not Application.Intersect(Target, Range("I3:K642")) Is Nothing ThenEhNum = Val(Selection)End IfEnd SubPrivate Sub Worksheet_Change(ByVal Target As Range)If Selection.Cells.Count > 1 Or Not IsNumeric(Target) Then Exit SubIf EhChk Or Target = "" Then EhChk = 0: Exit SubIf Not Application.Intersect(Target, Range("I3:K642")) Is Nothing ThenEhChk = 1: Target = Target +EhNum: Selection.Offset(-1).SelectEnd IfEnd Sub
1 個解答
- 准提部林Lv 79 年前最佳解答
EXCEL VBA.在〔合併儲存格〕輸入數字〔自動累加〕
<.准提部林.>
---------------------------------
範例檔功能簡介:
■主要需求:
在指定區域的儲存格皆以〔每5列〕合併為一個輸入格,
當輸入新數字時,與其原來數字〔累加〕,
例如:原數字為 5,當再直接輸入 6 時,自動累加為 11。
■程式碼:請複製至〔工作表〕程式碼區(非模組)
<頂端宣告>
Dim MyRng As Range, MyVal
<當選取指定輸入範圍時,記錄儲存格及其原值>
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set MyRng = Nothing: MyVal = 0
If Target.Columns.Count > 1 Then Exit Sub
If Target.Row < 3 Or Target.Row > 642 Then Exit Sub
If Target.Column >= [I1].Column And Target.Column <= [O1].Column Then
Set MyRng = Target.Item(1)
MyVal = Val(MyRng.Value)
End If
End Sub
<儲存格變動後,自動累加>
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column >= [I1].Column And Target.Column <= [O1].Column Then
If Target.Row < 3 Or Target.Row > 642 Then Exit Sub
If MyRng Is Nothing Then Exit Sub
If MyRng.Value = "" Then MyVal = 0: Exit Sub
'如果清除儲存格內容,即視為歸0而保持空格
'但仍可使用〔還原〕恢復原來數值
Application.EnableEvents = False
[J1] = MyRng.Address(0, 0): [K1] = MyVal
'記錄上一次更動儲存格位址及原值
MyRng.Value = Val(MyRng.Value) + MyVal
Application.EnableEvents = True
End If
End Sub
■程式碼:
1.當使用〔Delete〕清除儲存格內容時,還可使用〔還原〕功能
回復原值。
2.但已輸入新值而按了〔Enter〕,或移離該儲存格時,程式則
自動執行累加,無法再使用〔還原〕功能,所以,使用時須
謹慎為之。若發現輸入錯誤,只要按〔ESC〕取消即可。
3.本範例特加入在〔J1〕及〔K1〕記錄上一步更動的儲存格位址
及其原值,若有錯誤即可將原值貼回,但僅能防錯一次。
---------------------------------
<範例檔>:
---------------------------------