
triviální makro
Zdravím,
pokouším se začínat s makry v Excelu. Chci udělat takovou logickou hříčku - v buňkách H7 až H11 může být logická hodnota 1 nebo 0. Každé z pěti tlačítek změní logickou hodnotu v jiných buňkách (např. tlačítko 1 mění hodnotu v buňce H7, tlačítko 2 mění hodnotu v buňce H7 a H9, atd.). Problém je, že mi to nefunguje:) Tlačítko 2 změní pouze hodnotu H7 z 1 na 0, ale to je vše. Najde tam prosím chybu? Díky
Sub Makro2()
'
' Makro2 Makro
'
'
h1 = Range("H7").Value
h2 = Range("H8").Value
h3 = Range("H9").Value
h4 = Range("H10").Value
h5 = Range("H11").Value
If h1 = 0 And h3 = 0 Then
Range("h7").FormulaR1C1 = "1" And Range("h9").FormulaR1C1 = "1"
ElseIf h1 = 0 And h3 = 1 Then
Range("h7").FormulaR1C1 = "1" And Range("h9").FormulaR1C1 = "0"
ElseIf h1 = 1 And h3 = 0 Then
Range("h7").FormulaR1C1 = "0" And Range("h9").FormulaR1C1 = "1"
Else
Range("h7").FormulaR1C1 = "0" And Range("h9").FormulaR1C1 = "0"
End If
End Sub
Můžeš znovu popsat, čeho se snažíš dosáhnout?
A hlavně vložit přílohu. Protože z toho kódu je kulový poznat. Těch 5 tlačítek má spouštět jeden kód (Makro2)?
Celé, čo si vytvoril, sa dá zapísať, po opravách, takto:
alebo trocha upravenejšie, po odstránení zbytočností, takto:
a dalo by sa to ešte jednoduchšie, keby si namiesto 1 a 0 používal True a False, lenže:
Nech Ti už tlačítka menia hodnoty v bunkách H7 až H11 hocijak, keď prebehne kód pre novú kombináciu hodnôt v H7 až H11 , horný, či spodný kód robí to isté: pri každom spustení makra sa znegujú hodnoty v bunkách H7 a H9. Nič iné
Priraďovanie do premenných h1...h5 tu nemá zmysel a príkazy, ktoré sa majú vykonať pri splnení určitých podmienok, sa nespájajú operátorom And, ale jednotlivé príkazy sa píšu samostatne, do svojich riadkov.
To ale asi nie je to, čo si chcel. Možno si len nedobre popísal celú činnosť, cieľ si už nepopísal vôbec, alebo máš chybnú predstavu o tom, čo sa vlastne deje pri vykonávaní kódu a čo všetko treba premyslieť a ako to povedať počítaču, aby sa to správalo tak, ako Ty chceš.
To je to prvé, čo musíš, pri začínaní s programovaním, vedieť.
Urob si kontrolu:
Otvor si dve okná vedľa seba, pričom v prvom budeš mať hárok Excelu s bunkami H7 až H11 a v druhom budeš mať Editor VBA s týmto kódom.
V okne Editora VBA sa nastavíš do názvu makra a stláčaním klávesy F8 necháš kód makra krokovať po riadkoch, pri čom môžeš sledovať v hárku Excelu, ako sa vykonávajú jednotlivé príkazy a čo spôsobujú...
Výsledok tohto celého:
Keďže nevieme, čo si chcel dosiahnuť, ani Ti neporadíme, v čom máš chybu.
P.S. Tie kódy, čo som sem vložil, sú len tým istým, čo si napísal Ty, po odstránení chýb spôsobu zápisu...
sorry... našiel som si tam chybu...
Správne je:
toto robí to čo chceš:
po každom spustení zneguje obsah buniek H7 a H9
P.S.
tento príspevok je len kvôli oprave chyby, ale ešte raz zrekapitulujem aj ostatné:
Ak budeš namiesto 0 používať výraz False (Nepravda) a namiesto 1 výraz True (Pravda), tak to bude ešte jednoduchšie:
Alebo ešte ako píše nižšie Machr, môžeš samotnú negáciu použiť ako samostatnú procedúdu, do ktorej budeš tlačítkom odosielať adresy viacerých buniek ako argumenty.
Je to detto to, čo píše Machr, rozdiel je len v spôsobe negácie.
Překlopení hodnot buňky z 0 na 1 a naopak můžeš udělat daleko elegantněji, než IFem s testováním, zda je v buňce 0 nebo1, třeba za použití operátoru Mod (Modulo = zbytek po dělení). Pro každou buňku pak stačí napsat 1 řádek:
Tenhle řádek si pak můžeš dát do samostatné procedury a adresu buňky použiješ jako parametr. Ke každému tlačítko si pak napíšeš obslužnou proceduru, v které budeš volat tu proceduru s adresou buňky, kterou chceš změnit. Pokud budeš chtít jedním tlačítkem změnit obsah více buněk, zavoláš tu pomocnou proceduru vícekrát, vždy s jinou adresou buňky.
Aby to bylo snáze pochopitelné; píšeš:
Tak přesně tohle řeší následující kód:
Při vytváření tlačítek si pak musíš ke každému tlačítku na listu přiřadit odpovídající makro.
pokiaľ použije booleanovské hodnoty True a False, stačí na preklopenie Not:
Range("H7")=Not (Range("H7"))
Tým sa celý jeho kód neuveriteľne zjednoduší, akurát že je...k ničomu, lebo len opakovane neguje obsah dvoch buniek, ktoré ďalej nič neovplyvňujú...
Jasně. Já jsem se jen držel zadání autora, chtěl přepínat mezi 0 a 1...