Vra

Is daar iemand weet hoe ek kan kry 'n gebruiker-gedefinieerde funksie te herevalueer self (wat gebaseer is op verander data in die sigblad)? Ek het F9 en Shift + F9 , maar diegene doen nie probeer werk. Die enigste ding wat blyk te werk is die wysiging van die sel met die funksie oproep en dan druk Enter. Enige idees? Ek herinner my in staat is om dit te doen ...

Was dit nuttig?

Oplossing

Jy moet Application.Volatile gebruik in die top van jou funksie:

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

Dit sal dan herevalueer wanneer die werkboek veranderinge (as jou berekening is ingestel op outomatiese).

Ander wenke

Sommige meer inligting oor die F9 kortpadsleutels vir berekening in Excel

  • F9 rekent al werkkaarte in alle oop werkboeke
  • Shift + F9 rekent die aktiewe werkblad
  • Ctrl + Alt + F9 rekent al werkkaarte in alle oop werkboeke (Full herberekening)
  • Shift + Ctrl + Alt + F9 Herbouwt die afhanklikheid boom en doen 'n volledige herberekening

Goed, het gevind dat hierdie een myself. Jy kan gebruik Ctrl + Alt + F9 om dit te bewerkstellig.

As jy alle verwysings na die sigblad data in die UDF parameter lys sluit, sal Excel jou funksie herbereken wanneer die verwysde data veranderinge:

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

Jy kan ook gebruik Application.Volatile, maar dit het die nadeel van die maak van jou UDF altyd herbereken -. Selfs wanneer dit nie nodig het om omdat die verwysde data nie verander

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

Om oor te skakel na outomatiese:

Application.Calculation = xlCalculationAutomatic    

Om te wissel na Handleiding:

Application.Calculation = xlCalculationManual    

Die Application.Volatile nie werk vir herbereken 'n formule met my eie funksie binne. Ek gebruik die volgende funksie: Application.CalculateFull

Dit verfris die berekening beter as 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
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top