Excel makro - Podľa hodnoty zmenej bunky prepočítať stĺpec
Minule som potreboval poradiť s makrom. Teraz potrebujem znova. Myslel som, že si vystačím s vedomosťami z predchádzajúceho makra, ale nie je to tak. O čo mi ide:
- zmením hodnotu bunky D1
- automaticky sa musí podľa hodnoty prepočítať celý stĺpec F a G od 5. do povedzme 200. riadku
Niečo takéto:
ak D1change tak
pre každú bunku F5:F200 opakuj
bunka = bunka * D1
bunka.ofset(0, 1) = bunka * 2
koniec pre
Čiže akože toto:
Private Sub D1_Change(ByVal Target As Range)
On Error GoTo ErrorHandler
Application.EnableEvents = False
Set intersection = Intersect(Target.Cells, Range("F5:F200"))
For Each cell In intersection
cell = cell * D1
cell.offset(0, 1) = cell * 2
Next
ErrorHandler:
Application.EnableEvents = True
End Sub
Môžte mi niekto poradiť, ako to správne zapísať?
Viem, že to je len náznak, ako by to makro mohlo vyzerať, ale rozmýšľaj trocha:
- VBA nemá pre zmenu každej bunky samostatnú udalosť, takže D1_Change zrejme nerobí, to čo čakáš. Aj keby taká udalosť existovala, aký význam by mal argument Target?
- Keď chceš meniť hodnoty buniek v Range("F5:F200"), tak prečo by si mal prechádzať len cez bunky, ktoré sú v nejakom prieniku?
- Ak chceš bunke priradiť hodnotu, tak to musíš priradiť do vlastnosti cell.Value. Teraz si priradíš do premennej cell hodnotu a v ďalšom riadku s tou premennou pracuješ, ako keby v nej bola stále bunka.
Na takéto úlohy typu "ak sa zmení jedna bunka, tak nech sa zmenia hodnoty v iných bunkách" obyčajne stačia vzorce. Nestačili by aj v tomto prípade?
To makro by mohlo vyzerať takto:
Nie, vzorce tam byť nesmú. Ide o to, že nikto nesmie vedieť, ako sa k danej hodnote prišlo. Zatiaľ ďakujem. Popasujem sa s tým zajtra.
Takže nefunguje to. Presnejšie povedané funguje, ale nie v tomto súbore. Tam už nejaké makrá sú a bije sa to. Jedná sa totiž o cenník, ktorý bude makrom jednorazovo upravený.
Ak tam už existuje funkcia Worksheet_Change, tak to musíš samozrejme vložiť do nej, a nie dopísať ďalšiu s rovnakým menom.
VYriešil som to skopírovaním listu do nového súboru a vložením makra. Zatiaľ to stačí. Ďakujem za pomoc. Vyriešené. Ospravedlňujem sa za neskorú reakciu, ale zabudol som takmer na toto vlákno a spomenul som si až teraz.
Podľa toho čo tu čítam, ma napadá že jednoduchšie by bolo mať samostatný pracovný zošit so všetkými vzorcami a vytvoriť makro na vyexportovanie potrebných údajov do userackého cenníka. Ide to viacerými spôsobmi. Asi by som zvolil spôsob, že v pracovnom zočite by som pomocou makra načítal všetky hodnoty ako premenné a zapísal do už naformatovaného userackého zošita. Iná možnosť je, oznáčiť v pracovnom zošite v prislušnom hárku oblasť obsahujúce údaje a tie skopírovať, potom otvoriť nový zošit a do toho vložiť fomaty, údaje a všetko čo potrebujeme, samozrejme pomocou makra, do ktorého je nutné dopísať niektoré príkazy. Napr. definovať šírku stlpcov a tiež názov nového zošita trebars aj s aktálnym dátumom. Takto bude pri každom spustení makra vytvorený nový uživateľský cenník, na rozdiel od predchadzajúceho spôsobu, kde sa budú v cenníku iba meniť údaje.
Áno, vlastne tak som to urobil.