Formule v naslednjo prazno vrstico

Pomoč pri delu z MS Excelom
Odgovori
infozop
Prispevkov: 15
Pridružen: To Avg 16, 2005 12:02 pm

Formule v naslednjo prazno vrstico

Odgovor Napisal/-a infozop »

Pozdravljeni Matjaž!
Nekoliko mi "nagaja" dogodkovna procedura, ki mora vnesti formule v prvo naslednjo prazno vrstico (če je prazna oz če je A celica prazna).
Prilagam kodo, ki nagaja v primeru, da uporabnik ne vnese v celico Axx vsebino s pritiskom Enter tipke. Če se pomakne v B kolono s smerno tipko (desno) procedura ne uredi formul korektno.
Sklepam, da morda ni uporabljen pravi dogodek oz. tudi sama logika procedure ni najbolj korektna.
Tu je procedura:

Private Sub Worksheet_Change(ByVal Target As Range)
vrstica = ActiveCell.Row
kolona = ActiveCell.Column

If Cells(vrstica, 1).Value = "" Then
' Preskok, če je v vrstici že kaj vpisano
If Cells(vrstica - 1, 2).Value <> "" Then GoTo Konec

'Kopiranje formul v ustrezne celice
'
If kolona = 1 Or kolona = 2 Then
'MsgBox ("Izbrana celica je v koloni: " & kolona)
If vrstica >= 4 Then
Range("k3:O3").Select
Selection.Copy
Cells(vrstica - 1, 2).Select
ActiveSheet.Paste
Cells(vrstica - 1, 2).Select
End If

'če smo na začetku se tvori formula za prvo vrstico.
'
If vrstica = 4 Then
Range("l3:O3").Select
Selection.Copy
Cells(vrstica - 1, 3).Select
ActiveSheet.Paste
Cells(vrstica - 1, 2).Select
End If
End If

GoTo Konec
End If
Konec:

End Sub

Vnaprej hvala za analizo moje "možganske telovadbe"
admin
Site Admin
Prispevkov: 3691
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Prosim z besedami mi opišite, kaj natančno potrebujete; ker tegale makra, na žalost, ne razumem najbolje. Kdaj natančno se morajo kopirati tiste celice?
lp,
Matjaž Prtenjak
Administrator
infozop
Prispevkov: 15
Pridružen: To Avg 16, 2005 12:02 pm

Odgovor Napisal/-a infozop »

Ko uporabnik vpiše nekaj v celico A (prvo naslednjo prazno celico) se vrstica dopolni s formulami, ki so "shranjene" v področju k3:o3.
admin
Site Admin
Prispevkov: 3691
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

infozop napisal/-a:Ko uporabnik vpiše nekaj v celico A (prvo naslednjo prazno celico)...
Hm, samo da razčistiva.

Torej če uporabnik nekaj vpiše v celico A, se levo napolnijo preostale celice s formulami. Toda to se zgodi samo če celica nad njo ni prazna? Torej če uporabnik nekaj vpiše v a10 in je A9 napolnjena potem se dopišejo formule v vrstico 10, če pa je a9 prazna, pa se ne zgodi nič. Je res tako? je to smiselno?
lp,
Matjaž Prtenjak
Administrator
infozop
Prispevkov: 15
Pridružen: To Avg 16, 2005 12:02 pm

Odgovor Napisal/-a infozop »

Vse skupaj sem (pri poskušanju in testiranju) verjetno preveč "zakompliciral".
Procedura naj ob vnosu v celico A10 kopira formule iz skritega področja v celico B10 in desno od nje. Pri vrstici 4 se uporabi en del skritega področja, za ostale vrstice pa celotni skriti del.
Verjetno sem uporabil napačen dogodek, da bi te pogoje kontroliral in posledično imam v proceduri nekaj IF stavkov, da kontroliram, da se vse skupaj dogaja le, če sem v pravih celicah.
infozop
Prispevkov: 15
Pridružen: To Avg 16, 2005 12:02 pm

Odgovor Napisal/-a infozop »

A ja!
Pozabil sem omeniti, zakaj kontroliram B9 celico.
Če imam spremembo v A10 celici, ni nujno, da je to zadnja (nova vrstica s podatki) in mi to pokvari že vnesene podake.
Uporabnik lahko poljubno "povozi" formule. Pri samih formulah pa gre za to, da mu "lajšam" vnos datuma (v B koloni) in ure (v koloni C), ko gre za isto skupino podatkov. Ura se prenese iz prejšnje vrstice v novo.
Ko "povozi" datum ali uro se igra začne znova.
admin
Site Admin
Prispevkov: 3691
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Šele zdaj, ko sem vam jaz napisal makro (upam, da je to kar ste želeli), sem videl, kaj je v originalu mučilo vas. Nisem šel testirat, a sklepam, da je z vašim makrom vse OK, razen ene grde podrobnosti, ki se odrazi natanko v vašem problemu.

Nisem vas namreč razumel, zakaj procedura nebi delala če uporabnik pritisne tipko za desno, delala bi pa, če pritisne tipko Enter... Ha :) Vam procedura nebi delovala pravilno tudi, če uporabnik klikne z miško nekam drugam :?

Stvar je v tem, davi testirate vse glede na trenutno izbrano celico in ne glede na celico, ki se je spremenila!!!!!! Poglejte razlika med mojo in vašo kodo je na vrhu, kjer imate vi vrstica = ActiveCell.Row jaz pa vrstica = Target.Row. Premislite malce o tem in boste razumeli, kaj vam želim povedati.

Koda: Izberi vse

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim vrstica As Long
  Dim kolona As Long
  
  vrstica = Target.Row
  kolona = Target.Column
  
  ' v funkcijo vstopim samo v primeru, da se je
  ' sprememba zgodila v koloni A!
  ' Ta funkcija namreč popravlja vsebino celic,
  ' kar pomeni, da se zaradi spremembe celice
  ' sama funkcija zopet izvede ==> ciklično izvajanje
  If (kolona > 1) Or (vrstica < 4) Then Exit Sub
  
  ' če je v koloni b že kej vpisano potem tudi ničesar ne pokvarim
  If (Not IsEmpty(Cells(vrstica, 2))) Then Exit Sub
  
  ' če sem v vrstici 4 prepišem del formul
  Dim i As Integer
  If (vrstica = 4) Then
    ' napolnim B(2) do F(6) iz K3(11)..
    For i = 2 To 6
      Cells(vrstica, i) = Cells(3, 9 + i)
    Next
  Else
    ' napolnim B(2) do H(8) iz I3(9)..
    For i = 2 To 8
      Cells(vrstica, i) = Cells(3, 7 + i)
    Next
  End If
End Sub
lp,
Matjaž Prtenjak
Administrator
infozop
Prispevkov: 15
Pridružen: To Avg 16, 2005 12:02 pm

Odgovor Napisal/-a infozop »

Hvala!
Točno to je odgovor na moje težave.
Zavedal sem se :oops: , da v logiki procedure neustrezno testiram celice kolone A, nisem pa našel primernih VB komand, da bi obravnaval pravo celico. Vaša rešitev je jasna in ustrezna.
Človek se celo življenje uči.
Dobro je, da so v okolici tudi pravi poznavalci v pomoč.
Še enkrat HVALA! :D
Odgovori