返回列表 上一主題 發帖

[發問] vba做自動合計

我再請教Lai先生 為何每次使用此文件時為何都要到代碼內按巨集啟用呢?
三千年讀史, 不外功名利祿, 九萬里悟道, 終歸詩酒田園

TOP

我再請教Lai先生 為何每次使用此文件時為何都要到代碼內按巨集啟用呢?
tomtracy 發表於 2015-8-3 23:54

因為你的小計並非設定在『固定欄位』上,而是位於不定列上,
通常你可能在確定輸入完成後才會加上『小計』欄,在確定
工作結束後此時你才會去觸發 Ex() 之故。
假設你已確定『小計』欄是位在『固定欄位』上,那你可以直接在
該 K 欄,直接打入 『=SUM(K##:K##)』,不就結了?
何須再多此一舉去應用 VBA 解決!

TOP

回復 12# c_c_lai


    被您說對了! 可就有人想尽辦法就想試著看看有沒有更懶的方法! 為了滿足任務及想法就要找方式 :'( :'( :'(
三千年讀史, 不外功名利祿, 九萬里悟道, 終歸詩酒田園

TOP

本帖最後由 c_c_lai 於 2015-8-4 12:54 編輯

回復 13# tomtracy
放置於 Sheet1 (Sheet1) 程式碼內:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim bt As Single


  3.     bt = Range("B" & Rows.Count).End(xlUp).Row - 3  ' 小計之前的內容

  4.     If (bt >= 8 And Target.Row < bt) And Target.Column = 11 Then  ' 當 K 欄位值異動時
  5.         ThisWorkbook.Ex
  6.     End If
  7. End Sub
複製代碼
放置於 ThisWorkbook 程式碼內:
  1. Sub Ex()
  2.     Dim bt As Single
  3.    
  4.     With Sheet1
  5.         bt = .Range("B" & .Rows.Count).End(xlUp).Row
  6.         If bt > 8 And InStr(.Range("B" & bt - 3), "小計") Then
  7.             .Range("K" & bt - 3).Formula = "=SUM(K8:K" & (bt - 4) & ")"     '  小計
  8.             .Range("K" & bt).Formula = "=SUM(K" & (bt - 3) & ":K" & (bt - 1) & ")"     '  總計
  9.         End If
  10.     End With
  11. End Sub
複製代碼
儲存後,只要從 K8 欄開始至小計前 K 欄內容有所異動時,小計與總計內容值便會自動隨之異動,
而不需再由人工啟動 Ex(),這純粹是懶人的程式寫法亦是你所期望的方式。

TOP

回復 14# c_c_lai

我不知用何種言語去感謝您!除了感謝還是感謝! 您真的很有氣度的幫我!可是愚笨的我試了您的操作再開

建民公司 (已置入ThisWorkbook ).rar (17.82 KB)

建民公司 (2).rar (20.57 KB)

三千年讀史, 不外功名利祿, 九萬里悟道, 終歸詩酒田園

TOP

打的字為何都會不見呢?   我想說的是 Lai先生給我的文件我照做了 可是再重新開啟仍要到巨集處執行Ex ! 我把文件附上請lai先生看!
另外一份文件是我早先的文件代碼,是能自動執行的!自行修改後,發現只能加總合計下一組數字而已 是否有辦法修改?
三千年讀史, 不外功名利祿, 九萬里悟道, 終歸詩酒田園

TOP

回復 15# tomtracy

TOP

回復 17# c_c_lai

謝謝您!原來是這樣!
    :handshake
三千年讀史, 不外功名利祿, 九萬里悟道, 終歸詩酒田園

TOP

        靜思自在 : 發脾氣是短暫的發瘋。
返回列表 上一主題