Preračunavanje formul

Pomoč pri izdelavi makrov
Odgovori
Buba
Prispevkov: 85
Pridružen: Sr Mar 12, 2008 11:49 am
Kraj: Maribor

Preračunavanje formul

Odgovor Napisal/-a Buba »

Pozdravljeni!
Napisal sem lastno funkcijo, ki se izračuna samo takrat, ko jo vpišem v celico. Če spremenim vsebino celic na katere se nanaša funkcija se noče avtomatsko preračunat. Kako to ?

Koda: Izberi vse

Public Function VsotaCrkTest(crka As String, konstanta As Integer) As Single
' sešteje črke in jih pomnoži s konstanto
Dim z As Integer, k As Integer  ' začetek, konec
Dim obm As Range    ' območje v katerem iščemo črke

st = 0

r = ActiveCell.Row
z = 7
k = 37

Set obm = Range(Cells(r, z), Cells(r, k))

For Each c In obm
    If c.Value = crka Then
    st = st + 1
    End If
Next

VsotaCrkTest = st * konstanta

End Function
Lep večer :)
Buba
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Preračunavanje formul

Odgovor Napisal/-a admin »

:) vi pa od Excela zares pričakujete nmalce preveč. Excel namreč ni vsemogoč in ne more "razumeti", kaj točno vi želite početi. Če konkretiziram:

Parametra vaše funkcije sta 2 (črka in konstanta) in nobeden izmed teh parametrov ni sklic na katero izmed drugih celic - Excel namreč upošteva kot spremembo funkcije samo če se je spremenil kateri izmed vhodnih pogojev. V vašem primeru pa funkcija pač dostopa do nekega področja na listu in Excel ne more spremljati do katerega področja vaša funkcija dostopa - to je praktično nemogoče :)

V vašem primeru imate napako torej v vhodnih parametrih. Da bi vam funkcija delovala tako kot pričakujete morate območje posredovati kot parameter funkcije in potem bo vse delovalo tako kot pričakujete.

No, lahko pa uberete še eno - lažjo pot - in to je, da na vrh vaše funkcije zapišete 'Application.Volatile':

Koda: Izberi vse

Public Function VsotaCrkTest(crka As String, konstanta As Integer) As Single
   ' sešteje črke in jih pomnoži s konstanto
   Dim z As Integer, k As Integer  ' začetek, konec
   Dim obm As Range    ' območje v katerem iščemo črke

   Application.Volatile

   ' in tako dalje....   
End sub
S tem ukazom namreč Excelu zaukažete, naj vašo funkcijo preračuna vsakoč, ko se na listu karkoli spremeni.
lp,
Matjaž Prtenjak
Administrator
Buba
Prispevkov: 85
Pridružen: Sr Mar 12, 2008 11:49 am
Kraj: Maribor

Re: Preračunavanje formul

Odgovor Napisal/-a Buba »

Hvala za izčrpen odgovor. :)

Lep vikend! 8)
Buba
Buba
Prispevkov: 85
Pridružen: Sr Mar 12, 2008 11:49 am
Kraj: Maribor

Re: Preračunavanje formul

Odgovor Napisal/-a Buba »

Pozdravljeni!
Še eno vprašanje. Kam in kako naj napišem kratek opis funkcije, da se bo prikazal v meniju, ko vnašam parametre funkcije? (Menu, ki ga ponudi Excel, ko vstavljaš funkcijo.)

Lep dan !
Buba
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Preračunavanje formul

Odgovor Napisal/-a admin »

Ha, :) ja tole je pa malce skrito...
  1. Odprete datoteko z vašimi makri
  2. Odprete VBA urejevalnik
  3. Pritisnete F2 in odpre se vam okno z definicijami
  4. Čisto na vrhu okna imate dva padajoča seznama V prvem je nekaj izbrano (večinoma <All librares>) - tu izberite opcijo VBA PROJECT
  5. Sedaj se vam spodaj v oknu pojavi seznam vseh modulov vašega projekta in na desni strani vseh funkcij, ki so zapisane v posameznem modulu.
  6. Izberite torej funkcijo in jo desno kliknite, da se odpre hitri meni
  7. Iz menija izberite opcijo Properties...
  8. V polje Description vpišite opis funkcije...
To je to ;)
lp,
Matjaž Prtenjak
Administrator
Buba
Prispevkov: 85
Pridružen: Sr Mar 12, 2008 11:49 am
Kraj: Maribor

Re: Preračunavanje formul

Odgovor Napisal/-a Buba »

Hvala!! :P
Buba
Buba
Prispevkov: 85
Pridružen: Sr Mar 12, 2008 11:49 am
Kraj: Maribor

Re: Preračunavanje formul

Odgovor Napisal/-a Buba »

Pozdravljeni!
Še ena težava me muči. :( Spremenil sem funkcijo, tako da je vhodni parameter neko območje. Torej funkcija bi se morala preračunati takrat, ko se nekaj zgodi v izbranem območju. Sem pa opazil, da je rezultat funkcije drugačen, takrat ko vpišem funkcijo v celico, kot takrat ko tabelo že nekaj časa uporabljam. Izbranega območja ne spreminjam.

Koda: Izberi vse

Public Function StCrkV2(obm As Range, crka As String, konstanta As Integer)
' sešteje črke in jih pretvori v ure (dnevne, nočne izmene)

Dim pd As Integer, zd As Integer   ' prvi dan v mesecu, zadnji dan v mesecu (položaj)
Dim s As Integer, st As Single


Call ObmocjeMeseca(pd, zd) ' podprogram določi število dni v mesecu
st = 0

For Each c In obm
    If c.Value = crka Then
        s = c.Column
                                
        Select Case crka
            Case "D"
                st = st + 1
            Case "N"
                               
                If (s < pd) Or (s = zd) Then    ' test področja meseca
                   st = st + 0.5
                Else
                    st = st + 1
                End If
            
            Case Else
                
        End Select
    End If
 Next

StCrkV2 = st * konstanta

End Function
Podprogram ObmocjeMeseca določi položaj prvega in zadnjega dneva v vrstici.
Kaj bi lahko bilo narobe?

Pa vseeno lep večer!
Buba
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Preračunavanje formul

Odgovor Napisal/-a admin »

Ne vem, kaj bi lahko bilo narobe, ker na poznam vaše celoten aplikacije in načina dela....
lp,
Matjaž Prtenjak
Administrator
Odgovori