2008-08-14 43 views
55

Có ai biết cách tôi có thể lấy hàm do người dùng xác định để tự đánh giá lại (dựa trên dữ liệu đã thay đổi trong bảng tính) không? Tôi đã thử F9phím Shift +F9, nhưng những người không làm việc. Điều duy nhất có vẻ hoạt động là chỉnh sửa ô bằng lệnh gọi hàm và sau đó nhấn Enter. Ý tưởng nào? Tôi dường như nhớ rằng mình có thể làm được điều này ...Làm mới Kết quả Chức năng Excel VBA

Trả lời

93

Bạn nên sử dụng Application.Volatile ở phía trên cùng của chức năng của bạn:

Function doubleMe(d) 
    Application.Volatile 
    doubleMe = d * 2 
End Function 

Sau đó nó sẽ đánh giá lại bất cứ khi nào thay đổi bảng tính (nếu tính toán của bạn được thiết lập để tự động).

+2

Đó là tuyệt vời, tôi đã không biết rằng, nhờ một bó –

+13

Cảm ơn, chỉ cần bashing đầu của tôi chống lại một bàn trên này. Nên chỉ ra rằng mặc dù trong Excel 2010, bạn cần phải chuyển True thành Application.Volatile, tức là 'Application.Volatile True'. – mdm

+2

THANK. BẠN. Tôi sẽ mua bia cho bạn nếu tôi có thể! –

13

Được rồi, tự mình tìm thấy cái này. Bạn có thể sử dụng Ctrl + Alt + F9 để thực hiện việc này.

+0

Đây là lựa chọn duy nhất của bạn nếu bạn có Excel 2007 thấy là 'phương pháp Application.Volatile' đã được bổ sung trong Office 2010. –

28

Một số thông tin thêm về các phím tắt bàn phím F9 để tính trong Excel

  • F9 tính toán lại tất cả các bảng tính trong tất cả các workbook mở
  • phím Shift + F9 tính toán lại bảng tính tích cực
  • Ctrl + Alt + F9 tính toán lại tất cả các bảng tính trong tất cả các workbook mở (Full tính toán lại)
  • phím Shift + Ctrl + Alt + F9 xây dựng lại cây phụ thuộc và thực hiện một tính toán lại đầy đủ
9

Nếu bạn bao gồm TẤT CẢ các tham chiếu đến dữ liệu bảng tính trong danh sách tham số UDF Excel sẽ tính toán lại chức năng của bạn bất cứ khi nào dữ liệu được tham chiếu thay đổi:


    Public Function doubleMe(d as variant) 
    doubleMe=d*2 
    end Function 

Bạn cũng có thể sử dụng Application.Volatile, nhưng điều này có những bất lợi của việc UDF của bạn luôn luôn tính toán lại, ngay cả khi nó không cần phải bởi vì các dữ liệu tham chiếu không thay đổi.


    Public Function doubleMe() 
    Application.Volatile 
    doubleMe=Worksheets("Fred").Range("A1")*2 
    end Function 

-1
Public Sub UpdateMyFunctions() 
    Dim myRange As Range 
    Dim rng As Range 

    'Considering The Functions are in Range A1:B10 
    Set myRange = ActiveSheet.Range("A1:B10") 

    For Each rng In myRange 
     rng.Formula = rng.Formula 
    Next 
End Sub 
+0

Vui lòng giải thích mã một chút. Nó sẽ làm tăng ích lợi khá nhiều. – Trilarion

+0

rng.Formula = rng.Formula giống như nhập một ô và nhấn Enter lần nữa. Nó buộc Excel tính toán lại ô - bao gồm bất kỳ hàm tùy chỉnh nào. –

1

Để chuyển sang tự động:

Application.Calculation = xlCalculationAutomatic  

Để chuyển sang chế độ Manual:

Application.Calculation = xlCalculationManual  
+0

Tại sao lại là downvotes? nó thực sự hoạt động !!! – Tuscan

+0

Cảm ơn bạn. nó cũng làm việc cho tôi – ayman

1

Nó hoạt động tốt này để Refresh tính toán tốt hơn so với Dải (A: B) .Tính toán

Public Sub UpdateMyFunctions() 
Dim myRange As Range 
Dim rng As Range 

'Considering The Functions are in Range A1:B10 
Set myRange = ActiveSheet.Range("A1:B10") 

For Each rng In myRange 
    rng.Formula = rng.Formula 
Next 
End Sub 
-2

Application.Volatile không hoạt động để tính toán lại công thức có chức năng của riêng tôi bên trong. Tôi sử dụng các chức năng sau: Application.CalculateFull

Các vấn đề liên quan