Sửa code để hàm tự động tính toán khi giá trị tham chiếu thay đổi. (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

chuot0106

Thành viên gắn bó
Tham gia
20/1/13
Bài viết
2,567
Được thích
1,670
Em có download được 1 File để tính giá trị những ô cùng 1 màu trong một vùng nào đó. Nhưng mỗi khi em thay đổi giá trị các ô trong vùng cần tính toán thì công thức không tự động tính ạ(Giá trị đã tính trước đó không thay đổi). Em nhờ các Thầy và các anh chị trên diễn đàn giúp em sửa code để hàm tự động tính khi thay đổi giá trị trong vùng tham chiếu với ạ!!!
 

File đính kèm

Em có download được 1 File để tính giá trị những ô cùng 1 màu trong một vùng nào đó. Nhưng mỗi khi em thay đổi giá trị các ô trong vùng cần tính toán thì công thức không tự động tính ạ(Giá trị đã tính trước đó không thay đổi). Em nhờ các Thầy và các anh chị trên diễn đàn giúp em sửa code để hàm tự động tính khi thay đổi giá trị trong vùng tham chiếu với ạ!!!

Code này viết chưa đúng lắm. Sửa thành:
Mã:
Function summau(rng As Range) As Double
  Dim rng1 As Range, i As Long, t As Double
  [COLOR=#ff0000]Application.Volatile[/COLOR]
  [B][COLOR=#b22222]On Error Resume Next[/COLOR][/B]
  i = [COLOR=#ff0000]Application.ThisCell[/COLOR].Interior.ColorIndex
  t = 0
  For Each rng1 In rng
    If rng1.Interior.ColorIndex = i Then
      t = t + rng1.Value
    End If
  Next rng1
 [COLOR=#0000cd] summau = t[/COLOR]
End Function
Chỗ màu đỏ là chỗ tôi sửa lại. Chỗ màu xanh nên đưa ra ngoài vòng lập
On Error Resume Next đặt ở đầu code cũng không phải là thừa (ai biết dữ liệu cột A có chắc là số hay không)
 
Upvote 0
Em có download được 1 File để tính giá trị những ô cùng 1 màu trong một vùng nào đó. Nhưng mỗi khi em thay đổi giá trị các ô trong vùng cần tính toán thì công thức không tự động tính ạ(Giá trị đã tính trước đó không thay đổi). Em nhờ các Thầy và các anh chị trên diễn đàn giúp em sửa code để hàm tự động tính khi thay đổi giá trị trong vùng tham chiếu với ạ!!!
Thử code nay thêm Volatile để nhấn F9 tự động cập nhật.
[GPECODE=vb]
Function summau(rng As Range) As Double
Dim rng1 As Range, i As Long, t As Double
Application.Volatile
i = Application.Caller.Interior.ColorIndex


For Each rng1 In rng


If rng1.Interior.ColorIndex = i Then
t = t + rng1.Value
End If


Next rng1
summau = t
Set rng1 = Nothing
End Function


[/GPECODE]
Có thể dùng caller cũng được lỡ viết rồi post lên bạn tham khảo luôn --=0
 
Upvote 0
Cảm ơn Thầy ndu, cảm ơn bạn nmhung49. Cả 2 code trên đều rất tuyệt!
 
Upvote 0
Thử code nay thêm Volatile để nhấn F9 tự động cập nhật.
[GPECODE=vb]
Function summau(rng As Range) As Double
Dim rng1 As Range, i As Long, t As Double
Application.Volatile
i = Application.Caller.Interior.ColorIndex
For Each rng1 In rng
If rng1.Interior.ColorIndex = i Then
t = t + rng1.Value
End If
Next rng1
summau = t
Set rng1 = Nothing
End Function
[/GPECODE]
Có thể dùng caller cũng được lỡ viết rồi post lên bạn tham khảo luôn --=0
Bạn có thể giải thích giúp mình ý nghĩa của lệnh VolatileCaller được không ạ?
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom