Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA EXCEL - Funkcja użytkownika aktualizuje się co chwile

blacknigga 16 Paź 2015 14:45 573 7
  • #1 16 Paź 2015 14:45
    blacknigga
    Poziom 13  

    Witam,

    Mam dość prostą własną funkcję (w komórkach A1:A5000), która zastępuje mi albo 1 rozbudowaną funkcję w funkcji excela albo 3 funkcje (w komórkach A1:C5000). Problem jest taki, że teraz za każdym razem mi się przelicza. Jak puszczam makro, to chyba z 5-10 razy przelicza mi się ta funkcja ( co przedłuża pewnie działanie makra). Nawet jak w innym workbook'u puszczam makro nie związane z workbookiem gdzie mam własną funkcję, też się przelicza. Często jak wprowadze coś w innym arkuszu to oczywiśćie funkcja przelicza się.
    Wiem, że mogę użyć calculation manual, ale i tak po włączeniu automatic funkcja się przeliczy. Wolałbym mieć włączoną automatyczną kalkulację


    Code:
    Function PBiD(cell As Range) As String
    
        Dim y As Integer

        Application.Volatile True
       
        PBiD = cell.Value
            Select Case True
                Case PBiD Like "*Comdty*"
                    y = InStr(1, PBiD, "Comdty")
                    PBiD = Left(PBiD, y - 2)
                Case PBiD Like "*Index*"
                    y = InStr(1, PBiD, "Index")
                    PBiD = Left(PBiD, y - 2) & "i"
                Case PBiD Like "*Curncy*"
                    y = InStr(1, PBiD, "Curncy")
                    PBiD = Left(PBiD, y - 2) & "cu"
            End Select

    End Function
    {

    0 7
  • #2 16 Paź 2015 14:50
    marcinj12
    Poziom 40  

    Wywal

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
    i sprawdź, czy pomoże.

    0
  • #3 16 Paź 2015 15:35
    blacknigga
    Poziom 13  

    Tylko wtedy znowu funkcja nie będzie mi się wogóle przeliczała, jak dana komórka się zmieni?

    0
  • #4 16 Paź 2015 15:38
    marcinj12
    Poziom 40  

    blacknigga napisał:
    Tylko wtedy znowu funkcja nie będzie mi się wogóle przeliczała, jak dana komórka się zmieni?
    Będzie, czemu miała by nie przeliczać?

    0
  • #5 16 Paź 2015 15:39
    blacknigga
    Poziom 13  

    Application.Volatile nie jest od aktualizacji funkcji? W sensie żeby się zachowywała tak jak wbudowana funkcja

    0
  • #6 16 Paź 2015 15:42
    marcinj12
    Poziom 40  

    Pierwszy link z googla:
    https://msdn.microsoft.com/en-us/library/office/ff195441.aspx

    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.

    Czyli robi dokładnie to, czego nie chcesz, żeby robiła...

    0
  • #7 16 Paź 2015 15:55
    blacknigga
    Poziom 13  

    Ok wygląda na to, że działa, ale... Kiedyś też napisałem swoją funkcję bez volatile i gdy chciałem skopiować z jednej komórki do drugiej to funkcja się wtedy nie przeliczała. Musiałem wchodzić w każdą komórkę wcisakać F2 i enter by mi przeliczyło na nową wartość w nowej komórce, wtedy znalazłem na forum którymś o tym by dodać volatile. Od tamtego czasu to jest moja jedyna funkcja więc odrazu dodałem volatile do funkcji

    0
  • #8 20 Paź 2015 09:26
    blacknigga
    Poziom 13  

    Nie do końca działa tak jak bym chciał. Np po skasowaniu linijki przelicza się moja funkcja. Tak samo jak czasami coś zmienie w innym arkuszu to też mi się przelicza funkcja. Wyłącze autofiltr na tym arkuszu to też mi przelicza, chociaż żadnej komórki nie zmieniam

    0