..|| Blog || Produkti/Storitve || MExcel || MDodatki || 300 nasvetov ||..

Preračunavanje formul

Pomoč pri izdelavi makrov

Preračunavanje formul

OdgovorNapisal/-a Buba » Pe apr 20, 2012 10:20 pm

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
Buba
 
Prispevkov: 80
Pridružen: Sr mar 12, 2008 11:49 am
Kraj: Maribor



Matjazev.NET
 

Re: Preračunavanje formul

OdgovorNapisal/-a admin » So apr 21, 2012 8:36 am

:) 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
admin
Site Admin
 
Prispevkov: 3525
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Preračunavanje formul

OdgovorNapisal/-a Buba » So apr 21, 2012 1:42 pm

Hvala za izčrpen odgovor. :)

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

Re: Preračunavanje formul

OdgovorNapisal/-a Buba » Po maj 07, 2012 12:33 pm

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
Buba
 
Prispevkov: 80
Pridružen: Sr mar 12, 2008 11:49 am
Kraj: Maribor

Re: Preračunavanje formul

OdgovorNapisal/-a admin » Po maj 07, 2012 12:47 pm

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
admin
Site Admin
 
Prispevkov: 3525
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Preračunavanje formul

OdgovorNapisal/-a Buba » Po maj 07, 2012 1:35 pm

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

Re: Preračunavanje formul

OdgovorNapisal/-a Buba » To maj 08, 2012 9:48 pm

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
Buba
 
Prispevkov: 80
Pridružen: Sr mar 12, 2008 11:49 am
Kraj: Maribor

Re: Preračunavanje formul

OdgovorNapisal/-a admin » Sr maj 09, 2012 7:50 am

Ne vem, kaj bi lahko bilo narobe, ker na poznam vaše celoten aplikacije in načina dela....
lp,
Matjaž Prtenjak
Administrator
admin
Site Admin
 
Prispevkov: 3525
Pridružen: Sr jul 20, 2005 10:06 pm


Vrni se na VBA

Kdo je prisoten

Po forumu brska: 0 registriranih uporabnikov in 1 gost

cron