Úvodní stránka · Fórum · Ke stažení · Odkazy · Links (EN, DE, CZ, SK) 10. září 2010, Irma
Menu
Úvodní stránka
Časté dotazy k Excelu
Fórum
Kategorie článků
Databanka kódů
Ke stažení
Svět Excelu v RSS
Odkazy
Kontakt

Excel - funkce na listu
Excel - funkce VBA
Excel - klávesové zkratky
Excel - znaky, klávesnice
Excel - standardní barvy
Excel - slovník menu
Excel - konstanty
Excel - technické údaje
DVD Servis Office
Excel menu 2003 (Ribbon)
Offset Statistic

Chat
Sponzorované odkazy
Přihlášení
Přezdívka

Heslo



Nejste členem?
Zaregistrujte se co nejdříve.

Zapomněli jste heslo?
Nechte si poslat nové.
Kdo je online
Hosté online: 1
Žádný člen není online

Registrovaní členové: 537
Neaktivovaní členové: 47
Nejnovější člen: Veverka
Pohotovost Excel
Excel VBA - první pomoc

ICQ status

Skype
Hry online
Sudoku
Sudoku
Sudoku
Sudoku
Excelplus.NET
Excelplus.NET - RSS 0.91 spampoison.com
Google Pagerank - excelplus.netGoogle Pagerank Antispam.er.cz
Statistiky

Čist téma

Excel VBA - Excelplus.NET | Excel | Visual Basic for Applications (VBA)
Autor začátečnický nesrovnalosti...
zelenac
Člen

Příspěvků: 2
Založen: 26.02.10
Přidán 07.03.2010 15:53
Jsem úplný zelenáč a potřebuji napsat jednoduché makro v Excelu 2007, ale narazil jsem na nějaké nesrovnalosti...

1)
Asi jsem nějak nepochopil možnosti metody Select, resp. Activate. Pokud chci vybrat buňku v urč. sešitě, tak při použití příkazu:
Workbooks("jmeno.xlsm").Worksheets("List1").Range("B5").Select
...excel hlásí chybu "metoda Select třídy Range selhala" (pokud není List1 zrovna aktivní).
Musím nejprve vybrat sešit s listem a pak zvlášť buňku... Je to normální?
Např. metoda Copy takto funguje bez problémů.

2)
Pokud se pokusím do objektové proměnné cas typu Range přiřadit oblast Range takto:
r=5
Set cas = Range("B2", Cells(r, 2))
...je vše v pořádku
Pokud ovšem zkusím přiřadit i list:
r=5
Set cas = Worksheets("Výstupní hodnoty").Range("B2", Cells(r, 2))
...hlásí program chybu "1004". Patrně mu vadí vlastnost Cells použitá u objektu Range, ale nechápu proč.

Chápu, že je to trochu "podúrovňový" dotaz, ale nemám se kde jinde zeptat...
Díky za každou radu či vysvětlení!

Zelenáč Jirka
Poslat soukromou zprávu
Autor RE: začátečnický nesrovnalosti...
Premek
Člen

Obrázek uživatele

Příspěvků: 255
Bydliště: Ostrava
Založen: 11.04.07
Přidán 07.03.2010 20:28
Workbooks("jmeno.xlsm").Worksheets("List1").Range("B5").Select
...excel hlásí chybu "metoda Select třídy Range selhala" (pokud není List1 zrovna aktivní).


Ano, bohuzel, pokud pouzijes Select nebo Activate na jinem listu nez je aktivni dostanes tuto chybu, musis list predem vybrat, ale nacteni/vlozeni hodnoty z bunky na jinem listu jde.

Pokud ovšem zkusím přiřadit i list:
r=5
Set cas = Worksheets("Výstupní hodnoty").Range("B2", Cells(r, 2))
...hlásí program chybu "1004". Patrně mu vadí vlastnost Cells použitá u objektu Range, ale nechápu proč.


Spravne, tady vadi objekt Cells, protoze, se vztahuje k aktivnimu listu, kdezto ty se snazis zapisovat na jiny. Proste delas krizeni a to se mu nelibi, bud pred to Cells uved jmeno toho listu nebo to udelaj pres "B"&r (osobne bych to delal cele pres Cells, ale ja jsem trosku ulitlej na Cells ...

Chápu, že je to trochu "podúrovňový" dotaz, ale nemám se kde jinde zeptat...

Nedelej si problemy, forum je tu od toho aby se na nem lidi ptali, takze se nestresuj a ptej se klidne dal :-)


Nikdy neni tak zle, aby nemohlo byt jeste hur :-)
Office 2007 EN & Office 2003 CZ & Office 2000 EN & Office 2010 EN
Upravil Premek, 07.03.2010 20:34
303146945 http://www.excelvba.estranky.cz Poslat soukromou zprávu
Autor RE: začátečnický nesrovnalosti...
zelenac
Člen

Příspěvků: 2
Založen: 26.02.10
Přidán 16.03.2010 23:22
Díky moc za vysvětlení! Je to vlastně logický, ale člověka to nenapadne...

Ještě se zatím vyskytl problém se sloučenýma buňkama. Když jí (nebo spíš je) dám jako cíl kopírování, ohlásí se chyba 1004. Nefunguje ani když se zadá levá horní buňka ani celá oblast sloučení. Přitom třeba kopírovat ze sloučených buňek se dá bez problémů...

Nemůžu taky přijít na to, jak otestovat pomocí VBA, jestli v buňce se vzorcem je použito dělení nulou, tedy v prostředí excelu v buňce zobrazeno "#DIV/0!".

A ještě taková možná zbytečnost... v nápovědě VBE se mi nepodařilo najít kompletní objektový model Excelu, takže mi trochu uniká, jak se vyznat v některých příkazech. Např.:
ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort.SortFields.Clear
...jestli to dobře chápu, tak všechny výrazy nalevo od poslední tečky reprezentují objekty, až poslední je vlastnost nebo metoda. Lze to tak obecně říct? A předchozí příklad mi připomíná - je třeba rozdíl mezi setříděním oblasti pomocí metody sort nebo přes objekt sort? Ani nevím, jestli jsem to dobře pojmenoval :)

Nakonec je toho docela dost... Stačí mi úplně jen "zrychlené" odpovědi. Možná se radši ještě zeptám, jakou knížku byste mi mohl doporučit, abych se trochu vzdělal. Dál už nebudu zahlcovat fórum, slibuju :)

Jirka
Poslat soukromou zprávu
Autor RE: začátečnický nesrovnalosti...
boris
Člen

Obrázek uživatele

Příspěvků: 105
Založen: 09.07.08
Přidán 17.03.2010 07:16
Já osobně bych doporučoval John Walkenbach: MS Excel 2003 (2007) Programování ve VBA.
Verze 2003 má výhodu v tom, že obsahuje CD.
http://www.travell.cz/kniha_28_Microsoft_Excel_2003_Programovani_ve_VBA

Na ostatní dotazy ti jistě odpoví zkušenější kolegové:)
Upravil boris, 17.03.2010 07:19
Poslat soukromou zprávu
Autor RE: začátečnický nesrovnalosti...
Premek
Člen

Obrázek uživatele

Příspěvků: 255
Bydliště: Ostrava
Založen: 11.04.07
Přidán 17.03.2010 10:30
zelenac napsal:
Ještě se zatím vyskytl problém se sloučenýma buňkama. Když jí (nebo spíš je) dám jako cíl kopírování, ohlásí se chyba 1004. Nefunguje ani když se zadá levá horní buňka ani celá oblast sloučení. Přitom třeba kopírovat ze sloučených buňek se dá bez problémů...


Tak MergeCells = sloucene bunky jsou takove zahadne, ale ne moc
Prikaz
activecell.MergeCells ti vrati True nebo false pokud je aktivni bunka sloucena nebo ne
activecell.MergeArea.Cells.Count ti vrati pocet sloucenych bunek no a kdyz das za MergeArea tecku tak dostanes klasicky Range objekt => mas k dispozici veskere vlastnosti a metody

zelenac napsal:
Nemůžu taky přijít na to, jak otestovat pomocí VBA, jestli v buňce se vzorcem je použito dělení nulou, tedy v prostředí excelu v buňce zobrazeno "#DIV/0!".


Vetsinou to delam pres SpeciallCells, ale pokud chces kontrolovat treba jednu bunku tak muzes takto
IsError(ActiveCell) vraci True pokud aktivni bunka ma chybu
Activecell.Text vrati Text, ktery je zobrazen v bunce, muzes zkontrolovat zda je to #DIV/0! nebo pouzit funkce z listu = pokud tam je nejaka primo na #DIV/0!

A ještě taková možná zbytečnost... v nápovědě VBE se mi nepodařilo najít kompletní objektový model Excelu,

http://msdn.microsoft.com/en-us/library/bb149081.aspx

takže mi trochu uniká, jak se vyznat v některých příkazech. Např.:
ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort.SortFields.Clear
...jestli to dobře chápu, tak všechny výrazy nalevo od poslední tečky reprezentují objekty, až poslední je vlastnost nebo metoda.

Ano, chapes to spravne Clear je metoda

A předchozí příklad mi připomíná - je třeba rozdíl mezi setříděním oblasti pomocí metody sort nebo přes objekt sort? Ani nevím, jestli jsem to dobře pojmenoval :)


Myslim si ze je to uplne jedno.
Objekt range ma metodu Sort, kde muzes nastavit parametry trideni
pak je samostatny objekt Sort (ktery je pridan ve verzi 2007) a ktery vlastne rozsiruje moznosti razeni, ale podle me, pokud zadas do obou stejne kriteria dostanes stejne serazeny seznam (nezkousel sem)


Nikdy neni tak zle, aby nemohlo byt jeste hur :-)
Office 2007 EN & Office 2003 CZ & Office 2000 EN & Office 2010 EN
303146945 http://www.excelvba.estranky.cz Poslat soukromou zprávu
Přejít na:
... nejlépe se zpracovávají tabulky mléčné čokolády