< návrat zpět

MS Excel


Téma: EXcel 2007 - skrytí a zobrazení řádků rss

Zaslal/a 11.5.2014 6:51

Ahoj, potřebuju mít skryté řádky do doby než se tam objeví dnešní datum. To mám udělané pomocí vzorce =IFERROR(KDYŽ(A(DNES()>A4;DNES()>=A4+2);A4+1;"");"").

A teď potřebuju aby když v buňce bude pomocí toho vzorce datum aby se ten řádek zobrazil. To by asi šlo pomocí VBA, ale to je pro mě španělská vesnice. Nejlepší by bylo, kdyby se to makro spustilo při otevření sešitu. Jak na to?

Díky všem 1

Zaslat odpověď >

Strana:  « předchozí  1 2
icon #019675
eLCHa
Mám už teda vlasů poskrovnu, ale když vidím Select, tak rostou (dodám, že když už jsem si zvykl, že je nemám, tak nechci aby rostly ;) ). Jsou případy, kdy se mu nelze vyhnout, ale těch moc není. Ale k problému.

Pokud jsem to pochopil, data jsou doplňována postupně, den za dnem. Pokud není otevřen soubor 3 dny, chce se doplnit poslední 3 chybějící data.
Tedy zjistím poslední vyplněné datum (fce MAX), počet chybějících hodnot (zjištěné MAX - včera) a ty doplním.
Není tady třeba žádného cyklu a už vůbec selectu.

Sub subWriteMissingDates()
With ThisWorkbook.Sheets("List1")
If IsEmpty(.Cells(1)) Then
.Cells(1).Value = Date - 1
Else
Dim dMax As Date
dMax = Application.WorksheetFunction.Max(.Columns(1))

If dMax < (Date - 1) Then
Dim iMissingValuesCount As Integer
iMissingValuesCount = (Date - 1) - dMax

With .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(iMissingValuesCount, 1)
.Value = Application.Evaluate(CLng(dMax) & "+(ROW(1:" & iMissingValuesCount & "))")
.NumberFormat = "d.m.yyyy"
End With '.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(iMissingValuesCount, 1)
End If
End If
End With 'ThisWorkbook.Sheets("List1")
End Sub
citovat
#019678
avatar
Moc díky, funguje to výborně. 1

Jen bych ještě potřeboval aby mě "kurzor" po skončení makra zůstal na stejném řádku jako včerejší datum.
Dosud to bylo vyřešeno pomocí Cells(pR + n, "I").Select, ale teď tam ty proměnný nejsou a určitě to půjde i bez příkazu Select. Tedy mě je jedno jestli tam ten Select je nebo ne.

Teď se blbě zeptám, ale v tomhle jsem totální BFU. Co je špatnýho na příkazu Select?
Vidím ho všude používat.
Ještě jednou mod díky 1citovat
icon #019684
eLCHa
Co je špatnýho na příkazu Select
Neřekl bych špatného, ale zbytečného. Je to většinou zbytečný krok styluRange(XY).Select
Selection.Něco
Tím pádem kód změní polohu kurzoru a dojde k překreslení obrazovky, což je velmi zdržující. Správně je tedy Range(XY).Něco
Vy to máte "vyřešeno" pomocí ScreenUpdatingu (což u nekorektního ukončení kódu nebo většího projektu může způsobit problémy), takže vlastně k žádnému zdržení nedojde. Znamená to ale, že kód vykonává zbytečnou činnost, zvlášť když tam máte Select 2x za sebou. Není zanedbatelná ani nepřehlednost kódu.
Zásada je co nejméně změnových přístupů na list. V mém kódu pouze čerpám data, vše vypočtu a teprve potom najednou zadám do celé oblasti výsledné hodnoty. Vyhnul jsem se překalkulování listu během kódu i překreslování obrazovky během kódu - tedy 2 asi nejvíce zdržujících procesů.

Samozřejmě, příkaz Select slouží k umístění kurzoru. Tedy pokud má kód umisťovat kurzor, tak je zbytečné vymýšlet něco jiného, protože by nějakému chytrolínovi (myšleno mně) rostly vlasy i když nechce.citovat
icon #019685
eLCHa
Jen bych ještě potřeboval aby mě "kurzor" po skončení makra zůstal na stejném řádku jako včerejší datum.

Takže pokud potřebujete umístit kurzor na včerejší datum (překládám si jako poslední vyplněnou buňku ve sloupci A listu List1, použijete samozřejmě Select. Před řádekEnd With 'ThisWorkbook.Sheets("List1") vložte.Select
.Cells(.Rows.Count, 1).End(xlUp).Select

První řádek přepne na list List1 (pro případ, že není aktivní - do té doby pracuji s List1, ikdyž aktivní být nemusí, bohužel pro změnu kurzoru je zapotřebí aktivovat) a druhý vybere buňku.citovat
#019692
avatar
pro eLCHa:

Děkuji za Váš čas a podrobné vysvětlení.

Po vložení

.Select
.Cells(.Rows.Count, 1).End(xlUp).Select

mě to dávalo "kurzor" na buňku A1. Já potřebuju aby mi to kurzor dávalo na řádek se včerejším datem do sloupce I. Proto jsem si dovolil upravit kód takto:

.Select
.Cells(.Rows.Count, 9).Select

Několikrát jsem to vyzkoušel a funguje mi to. Snad je úprava v pořádku.

Děkuji za Vaši trpělivost se mnou 1citovat
icon #019693
eLCHa
Několikrát jsem to vyzkoušel a funguje mi to. Snad je úprava v pořádku.

Určitě? - nějak mi tam chybí to End(xlUp)
Váš zápis nastaví kurzor na buňku I1048576 (v E2007)

Kód si samozřejmě upravte, jak potřebujete. Žaloby se bát nemusíte ;))citovat
#019697
avatar
Já mám Excel 2007.

V souboru Datum_pred_odtranenim_End(xlUp) jsem jen změnil sloupec kde se umístí kurzor. Nyní se umisťuje do buňky I1.

V souboru Datum_po_odtraneni_End(xlUp) jsem odtranil End(xlUp)a změnil sloupec. Nyní se mi kurzor umístí ve sloupci I na řádku posledního data (včerejší datum).

Vyzkoušeno na dvou stolních PC a dvou NTB s Excelem 2007.

Netvrdím v žádném případě že je to správně, že je to bez chyby. Ale mě to tak prostě funguje.citovat

Strana:  « předchozí  1 2

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje