VBScript-makro potrebuji radu   otázka

VB6/VBA

Ahoj,

chci udelat toto:

objevi se inputbox a kdyz do nej zadam promennou jinou nez cislo zaokrouhlene na dve desetinna mista tak mi vyskoci upozorneni (msg box), at to zadam znovu - znovu se objevi input box. To vse do te doby, nez to zadam spravne. Nefunguje mi tu deklarace promennych as string, automaticky je to asi as variant a jakmile do inputboxu vlozim cislo, zacne to s promennou pracovat jako s cislem.

PS: neni to v excelu, programuju v nejakem jinem programu, specialni co mame v praci na zadavani dat, tak ten podporuje makra, ale nektere funkce tu jsou omezeny.

diky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A nešlo by si to číslo uložit do jiné proměnné Variant pomocí konverze číslo=>řetězec:

sCislo = CStr(InputVystup)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jo diky, nakonec me to taky napadlo:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A jak s tou proměnnou "začnete pracovat"?

Nevím jak ve vašem programu, ale třeba v excelu, pokud přiřadím vstup (z inputboxu) do nějaké proměnné, má to typ variant/string a dá se s tím jako se stringem pracovat. Samozřejmě, pokud s tím začnu dělat matematické operace, jelikož zde funguje automatická konverze, pro výpočet se to překonvertuje na číslo a dále to již jako s číslem pracuje.

A i kdyby ten váš program konverzi prováděl hned, je takový problém vynásobit hodnotu zadanou do inputboxu 100 a testovat, jestli na místě za desetinou čárkou zůstalo nějaké významné číslo (z důvodu nepřesnosti float výpočtů tam něco malého zaokrouhlovacího být může), pokud ano, spustit zádávání znovu, pokud ne, pokračovat v programu dále?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dekuji, je to tak jak pisete v prvnim odstavci, uz jsem na to prisla. Nevite jeste nahodou, kdyz mam:

dim promenna, promenna1

promenna = input.box ("zadej promennou")

promenna1 = promenna - 0,1

send.keys promenna1

tak aby promenna1 byla cislo zaokrouhlene na 2 desetinna mista?

protoze kdyz je promenna 1,25, tak promenna1 je 1,15 - to je ok.

Ale kdyz je promenna 1,20, tak promenna1 je 1,1 a potrebuju, aby to napsalo 1,10. diky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak pozor, tady směšujete dvě různé věci.

Já Vaše zadání pochopil, že kontrolujete vstup uživatele, aby nezadal třeba 1,235 - toto číslo není zaokrouhleno na 2 platná místa, nanébrž má za desetinnou čárkou těch platných čístic více.

Ale pokud uživatel zadá 1,1, je to platný vstup, protože toto číslo je "zaokrouhleno i na 2 platná místa". (toto číslo je totiž totožné s číslem 1,10).

To co píšete Vy již se zaokrouhlováním nemá nic společného, jedná se pouze o formát zobrazení daného čísla.

U excelu, v tomto případě, byste nastavila formát buňky na "číslo se dvěma desetinnými místy", jak funguje a jaké možnosti jsou ve Vašem programu to bohužel nevím (v krajním případě by mělo být možné před vypsáním to převést na text a využít vhodných formátovacích řetězců - to ale vše odvisí od konkrétní aplikace VB Scriptu)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

tak uz jsem toto vyresila tak, ze spocitam, kolik desetinnych mist cislo ma a prevedu ho na retezec. Pokud ma 0 desetinnych mist, k retezci pripojim ".00", pokud 1 des. misto tak jednu nulu a pokud 2 tak nepripojim nic. Jenze tim mi vznikly 3 ruzne promenne. No a za timto krokem mam hrozne moc prikazu, co se s toutou promennou (jenom s jednou z nich, ktera je aktualni) ma vykonat.

Muzu to udelat tak, jako:

If promenna ma 0 des. mist then

promenna2 = promenna 1 + ".00"

hodne prikazu (se zapojenim promenne2)

else

promenna3 = promenna 1 + "0"

hodne prikazu (se zapojenim promenne3)

else

hodne prikazu (se zapojenim promenne1)

end if

Jenze takhle ten kod bude hrozne dlouhy. Neda se udelat neco, aby to vybralo tu spravnou promennou a tech hodne prikazu bych napsala jenom jednou? Mam totiz omezenou delku kodu (asi 4500 radku).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

jeste me to napadlo tak, ze by se to dalo vyresit, kdyby existovala funkce, ktera umi vyvolat dalsi makro. A tech hodne prikazu by bylo schovane v jinem makru (v jinem souboru s kodem a vedl by na nej jakysi odkaz). Jde to?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Máte problém jak vstup obsahující celé číslo nebo s jedno či víc des. míst upravit tak, vždy obsahoval dvě des. místa, ale jeden vstup od uživatele dáváte do tří proměnných, proč?

Hodnotu převeďte na číslo (pokud již není), zaokrouhlete na dvě des. místa a převeďte na text, je-li potřeba.

Nebo v textové hodnotě bez potřeby zaokrouhlení (?) zjistěte přítomnost oddělovače des. míst, pokud chybí přidejte ".00", pokud existuje, přidejte "00" a pomocí řetězcové funkce upravte délku za oddělovačem na 2 znaky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Máte problém jak vstup obsahující celé číslo nebo s jedno či víc des. míst upravit tak, vždy obsahoval dvě des. místa, ale jeden vstup od uživatele dáváte do tří proměnných, proč?

Protoze me napadlo jen reseni uvedene vyse a k tomu musim deklarovat tri ruzne promenne prave. Nebo to jde udelat jen s jenou? Jak? Jeste s timto zacinam a poradne nevim,jak to funguje, kdyz mam promenou uz danou, jestli bych ji mohla v prubehu zmenit treba pomoci inputBoxu

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nezlobte se, prosím, na mne, ale to co píšete je úplná blbost.

Možná byste mohla přesněji popsat, o co vám jde. jaké příkazy máte v tom bloku "hodně příkazů"???:

1. jak jsem již psal, rozlišujte, prosím, zaokrouhlování a formátování textu. Zaokrouhlení znamená "ořezání" čísla o méně významné číslice od zvolené přesnosti (1,233 -> 1,23). tato operace mění hodnotu čísla, proto je rozdíl, počítám-li s číslem původním, nebo zaokrouhleným. Naopak formátování slouží pouze k získání "pěkného" výstupu čísla téhož, ale nemění jeho hodnotu. Proto je úplně jedno, počítám-li s hodnotou 1,2 nebo 1,20 - vždy dostanu stejný výsledek (jde-li tedy o matematické operace).

2. Přečtěte si něco o proměnných, k čemu slouží a jak fungují. Proměnné jsou to právě proto, že je do nich možno vložit "proměnnou" informaci, proto Váš příklad se 3 proměnnými pro totéž svědčí o totálním nepochopení úplných základů.

Mám-li tedy jednu proměnnou, v tomto případě textovou, mohu úplně klidně napsat něco na ten způsob:

If promenna ma 0 des. mist then
   promenna = promenna + ".00"
   else if promenna ma 1 des. misto
   promenna = promenna + "0"
end if

hodne prikazu (se zapojenim promenne)

(je to pouze názorný příklad, jinak se to dá napsat podstatně lépe.

3. Pokud pod tím blokem hodne prikazu mate na mysli nějaké výpočty, pak veškerá vaše předešlá námaha stejně výjde vniveč, protože se Vám vaše (stringová) proměnná, bez ohledu na to, kolik jste za ni připojila nul, stejně přetypuje na proměnnou číselnou, u které se nevýznamné nuly stejně odstraní.

Takže, shrnuto a podtrženo, vyjasněte si především, čeho chcete nebo potřebujete dosáhnout.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

jj uz jsem na to takto take mezitim prisla, jenze kdyz se nikde nezeptam tak mi to nejde a az kdyz to napisu,tak tim napsanim jakoby si to uvedomim a pak mi to dojde..

jinak tech hodne prikazu je prave o tom, ze se s tou promennou uz nepocita a akorad se na ruzna mista vlozi a musi byt v tom danem formatu.

Jinak dekuji za rady, priste si skusim o tom co nejvic precist, nez sem budu psat, zatim jsem to vytvarela metodou pokus - omyl a co to udela.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback