Tự động tính toán khi số liệu thay đổi

Liên hệ QC

VADaNang

Thành viên chính thức
Tham gia
4/12/06
Bài viết
65
Được thích
47
Chào các bạn.
Mình là người hay hỏi nhiều, mong các bạn thông cảm nghe.
Mình có một file nhỏ mong các bạn xem có cách giải quyết nào để số liệu tự động tính toán không cho cột D (Thường thì mình sau khi đưa số liệu phải chạy một thủ tục khác để kiểm tra tính toán tích các số lại).
Xin cám ơn nhiều.
 

File đính kèm

  • Anh1.jpg
    Anh1.jpg
    188 KB · Đọc: 45
  • ThiDu.xls
    27 KB · Đọc: 85
Bạn để ý tham số của hàm nhé ByVal Target As Excel.Range
Target là vùng vừa bị thay đổi, trong ví dụng của bạn ô B5 có thay đổi đâu mà bạn muốn ô D5 thay đổi(nó vẫn bằng D4 phải không)
 
Chào bạn.
Mình thấy hiện tại B5 không thay đổi trực tiếp nhưng lại thay đổi gián tiếp.
Tức khi B4 hoặc C4 thay đổi thì D4 thay đổi dẫn đến B5 thay đổi (Do B5=D4; hiện thấy kết quả B5=8) .
Như vậy mình cảm thấy B5 thay đổi thì sẽ dẫn đến D5 thay đổi chứ.
 
VADaNang đã viết:
Chào bạn.
Mình thấy hiện tại B5 không thay đổi trực tiếp nhưng lại thay đổi gián tiếp.
Tức khi B4 hoặc C4 thay đổi thì D4 thay đổi dẫn đến B5 thay đổi (Do B5=D4; hiện thấy kết quả B5=8) .
Như vậy mình cảm thấy B5 thay đổi thì sẽ dẫn đến D5 thay đổi chứ.
Bạn hãy đặt đoạn code này vào trên thủ tục hay hàm của bạn.
Mã:
application.Volatile

Lê Văn Duyệt
 
Chào bạn.
Mình đưa application.Volatile vào ngay trong thủ tục nhưng khi thay đổi số liệu cells B4 hoặc C4 thì D5 vẫn không thay đổi.
 
VADaNang đã viết:
Chào bạn.
Mình đưa application.Volatile vào ngay trong thủ tục nhưng khi thay đổi số liệu cells B4 hoặc C4 thì D5 vẫn không thay đổi.

Đúng rồi bác Duyệt ơi
bác giải thích thêm cho chúng em mở rộng tầm mắt tý
 
Application.Volatile
Bạn hãy đọc phần Help của Excel
Marks a user-defined function as volatile. A volatile function must be recalculated whenever calculation occurs in any cells on the worksheet. A nonvolatile function is recalculated only when the input variables change. This method has no effect if it's not inside a user-defined function used to calculate a worksheet cell.

expression.Volatile(Volatile)
expression Required. An expression that returns an Application object.

Volatile Optional Variant. True to mark the function as volatile. False to mark the function as nonvolatile. The default value is True

Example
This example marks the user-defined function "My_Func" as volatile. The function will be recalculated whenever calculation occurs in any cells on the worksheet on which this function appears.

Function My_Func()
Application.Volatile
'
' Remainder of the function
">
End Function
Với phần help này tôi nghĩ cũng đủ để bạn hiểu việc dùng phương thức này.
Việc đọc help nhiều khi rất hay (nhiều khi hơn cả các sách dịch).

Lê Văn Duyệt
 
Lần chỉnh sửa cuối:
Bạn cần làm thêm việc này:
Vào menu Tools\Options... vào mục Calculation tick chọn "Automatic"
 
Rất cám ơn các bạn quan tâm đến.
Mình đã áp dụng mọi cách theo ý của các bạn nhưng nó vẫn chưa rục rịch gì .
Mong các bạn có cao kiến gì dễ dùng nữa không?
Xin cám ơn.
 
VADaNang đã viết:
Rất cám ơn các bạn quan tâm đến.
Mình đã áp dụng mọi cách theo ý của các bạn nhưng nó vẫn chưa rục rịch gì .
Mong các bạn có cao kiến gì dễ dùng nữa không?
Xin cám ơn.

Để giải quyết nhanh bạn có thể đưa code lên mọi người xem biết đâu có vấn đề gì đó?
 
Không có vấn đề gì cả. Tôi vẫn thường xuyên làm như thế. Tôi đã thử trên tệp thidu của bạn và thấy kết quả bình thường. Hãy chạy thử trên máy khác xem.
 
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Hang = Target.Row
If Hang > 2 Then
Cells(Hang, 4) = Cells(Hang, 2) * Cells(Hang, 3)
End If
End Sub
Sự kiện trên làm việc khi một (hay nhiều) ô do người sử dụng trực tiếp thay đổi.
Trong file khi bạn thay đổi giá trị ở ô B4 hoặc C4 thì ô B5 cũng thay đổi nhưng không phải do người dùng nhập vào nên không thể chạy sự kiện trên được --> ô D5 không thay đổi giá trị.
 
Xin cám ơn bạn đã quan tâm.
Nếu theo nhìn nhận về hoạt động của thủ tục thì đúng như bạn nói vậy tức phải có sự thay đổi trực tiếp trên B5 thì D5 mới thay đổi.
Nếu vậy không biết có cách nào để thêm lệnh trực tiếp vào ngay thủ tục đó mà D5 lại thay đổi không.
(tức biến B5 thay đổi gián tiếp thành thay đổi trực tiếp).
Cám ơn nhiều.
 
Web KT
Back
Top Bottom