سؤال

هل يعرف أحد كيف يمكنني الحصول على وظيفة محددة من قبل المستخدم لإعادة تقييم نفسها (بناءً على البيانات المتغيرة في جدول البيانات)؟لقد حاولت F9 و يحول+F9, ، لكن تلك لا تعمل.الشيء الوحيد الذي يبدو أنه يعمل هو تحرير الخلية باستخدام استدعاء الوظيفة ثم الضغط على Enter.أيه أفكار؟يبدو أنني أتذكر أنني كنت قادرًا على القيام بذلك ...

هل كانت مفيدة؟

المحلول

يجب عليك استخدام Application.Volatile في الجزء العلوي من وظيفتك:

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

سيتم بعد ذلك إعادة التقييم كلما تغير المصنف (إذا تم تعيين الحساب الخاص بك على الوضع التلقائي).

نصائح أخرى

بعض المعلومات الإضافية حول اختصارات لوحة المفاتيح F9 لإجراء العمليات الحسابية في Excel

  • F9 إعادة حساب كافة أوراق العمل في كافة المصنفات المفتوحة
  • يحول+ F9 إعادة حساب ورقة العمل النشطة
  • كنترول+بديل+ F9 إعادة حساب كافة أوراق العمل في كافة المصنفات المفتوحة (إعادة الحساب الكامل)
  • يحول + كنترول+بديل+ F9 إعادة بناء شجرة التبعية وإجراء عملية إعادة حساب كاملة

حسناً، وجدت هذا بنفسي.يمكنك استخدام كنترول+بديل+F9 لانجاز هذا.

إذا قمت بتضمين جميع المراجع إلى بيانات جدول البيانات في قائمة معلمات UDF، فسيقوم Excel بإعادة حساب وظيفتك كلما تغيرت البيانات المرجعية:

Public Function doubleMe(d As Variant)
    doubleMe = d * 2
End Function

تستطيع ايضا استخذام Application.Volatile, ، ولكن هذا له عيب يتمثل في جعل UDF الخاص بك يعيد الحساب دائمًا - حتى عندما لا يكون هناك حاجة لذلك لأن البيانات المرجعية لم تتغير.

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

للتبديل إلى تلقائي:

Application.Calculation = xlCalculationAutomatic    

للتبديل إلى يدوي:

Application.Calculation = xlCalculationManual    

ال Application.Volatile لا يعمل لإعادة حساب صيغة مع وظيفتي الخاصة بالداخل.أستخدم الوظيفة التالية:Application.CalculateFull

يؤدي هذا إلى تحديث الحساب بشكل أفضل من Range(A:B).Calculate:

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

    ' Assume the functions are in this range A1:B10.
    Set myRange = ActiveSheet.Range("A1:B10")

    For Each rng In myRange
        rng.Formula = rng.Formula
    Next
End Sub
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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top