@lubo
daal to už napsal za mne ;)
já jen dodám, že kdyby někdo rozuměl těm vzorcům, nebude se tady ptát, jak to má udělat.
My, pokud jsme schopni, jsme ochotní jim pomoci, ale nejsme schopni odhadnout všechny okolnosti. Pokud si projedete všechna nejen mnou navrhovaná řešení na tomto fóru, na každém možná najdete něco, kdy to nebude fungovat správně.
@lubo
ad IFERROR - má význam, pokud je počet = 0, nebude fungovat ani POSUN, ani INDEX ;). Ale máte pravdu v tom, že je moc obecná a bylo by lepší, pokud chci odchytit určitou chybu, zaměřit se na ni. Takže správně by bylo =KDYŽ(POČET2(A7:A500)=0;0;SUMA(POSUN(H8;0;0;POČET2(A7:A500);1))). Chyby v datech se neočekávají, protože fortes napsal podle počtu vyplněných buněk. Ani jeden ze vzorců neřeší nesouvislost vyplněných dat, takže pak mohou všechny 3 vzorce dávat špatné výsledky a autor, pokud to tak nechtěl, to nepozná. To je podle mně větší problém.
Funkce AGGREGATE je možná fajn, ale podle http://office.microsoft.com/cs-cz/excel-help/aggregate-funkce-HA010338704.aspx je až od 2010. Takže ji ve 2007 nemám, nemám ji odzkoušenou a proto jsem ji ani nemohl použít.
lubo napsal/a:
POSUN - problémová funkce, bylo zmíněno, že je volatilní, navíc při úpravách sešitu snadno vznikají chyby. Obvykle to jsou spočtené koordináty, které vracejí hodnoty mimo předpokládanou oblast dat. Určité varování přijde, až když odkážou mimo prostor listu. INDEX je bezpečnější.
lubo napsal/a:
Asi jsi dosud nepotkal větší sešit. Při špatně napsaných vzorcích získáš občas i několik hodin volného času. Občas i v malém souboru.
@AL
Já to neberu vážně ;)
Já jen beru v úvahu, že tady na toto fórum chodí většinou začátečníci a těm bych nemotal hlavu tím, jestli je fce volatilní nebo ne ;)
@AL
Když to přeženu, tak je to jako byste v autě nepoužil klimatizace, protože žere palivo.
V současných počítačích bych systémové prostředky neřešil - navíc pokud je to malý soubor.
Já mám POSUN rád a používám ho, navíc je to fce, kterou nepoužijete v každém souboru a v něm taky nebude 1000x ;)
Zbavujete se tím fcí, které musíte obcházet. Podle mně zbytečně ;)
Odpověď už tu je, já jen dám řešení s funkcí, která je k tomu přímo určená ;)
=IFERROR(SUMA(POSUN(H8;0;0;POČET2(A7:A500);1));0)
@AL
máte můj obdiv - já vůbec nepochopil, o co jde ;))
Asi už stárnu ;)
Změňte kódování u customUI.xml - z ANSI na UTF bez BOM
Vyzkoušeno na vašem příkladě a funguje mi to.
Začnu tím druhým a to je proložení.
Nenapsala jste verzi excelu.
Ve 2007 je samozřejmě možnost změnit proložení textu. Je ale třeba vložit objekt Textové pole, nelze to provést přímo v buňce.
Co se týče ohraničení. Záleží k čemu to chcete - pokud to má být na tiskárně, použijte tečkovanou čáru - vytiskne se většinou jako souvislá tenká čára.
Pokud chcete jen efekt na monitoru, vyzkoušejte následující - vizuálně vypadá čára slabší, když ji neuděláte černou, ale šedou - čím světlejší, tím vypadá tenčí. Ale záleží od monitoru. ;)
Nedá mi to - musím se zeptat
Co je myšleno - zabarvit řádek?
Při výběru položky?
Zabarví se mi celý - v E2007 i 2010
Použil jsem přibližně váš kódPrivate Sub UserForm_Initialize()
With Me.ListBox1
.ColumnCount = 2
.ColumnWidths = "60;60"
.AddItem "Company_ID"
.List(0, 1) = "Company_name"
.AddItem "Company_ID"
.List(1, 1) = "Company_name"
End With
End Sub
To tlačítko obnovit spouští kód VBA?
Pokud ano, před tím, než spustíte aktualizaci externích dat načtěte data do proměnných (nějaké pole, které bude vědět, ke které firmě data patří) a po aktualizaci ta data přiřadíte správně.
A ta funkce má jednu vlastnost, která se mi nelíbí
A to, že mění Dialog Find
Ten by se měl minimálně resetovat do defaultního nastavení
Např.:Cells.Find What:=vbNullString, _
After:=ActiveCell, _
LookIn:=xlFormulas, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False
Pokud byste chtěl použít SpecialCells ke zjištění posledního vyplněného řádku, tak to samozřejmě lze
Ten kód bude delší, ale nic nemění
Function fncLastRow(ByRef sh As Worksheet, Optional ByVal sPassword As String = vbNullString) As Long
'by eLCHa, eLCHa@email.cz
Dim bProtection As Boolean
bProtection = sh.ProtectContents
sh.Unprotect sPassword
Dim rDataOnSheet As Range
On Error Resume Next
Set rDataOnSheet = sh.UsedRange.SpecialCells(xlCellTypeConstants)
If rDataOnSheet Is Nothing Then
Set rDataOnSheet = sh.UsedRange.SpecialCells(xlCellTypeFormulas)
Else
Set rDataOnSheet = Union(rDataOnSheet, sh.UsedRange.SpecialCells(xlCellTypeFormulas))
End If
On Error GoTo 0
fncLastRow = rDataOnSheet.SpecialCells(xlCellTypeLastCell).Row
If bProtection Then
sh.Protect sPassword
End If
Set rDataOnSheet = Nothing
End Function
Vysvětlení se vám dostane možná dotazem přímo na MS, tady asi opravdu ne - my bychom jen spekulovali. Pokud vám teda nestačí to moje "Bo bug", protože to si opravdu myslím ;)))
Já chci ale ještě reagovat na tu fci, kterou jste tady dal. Nic proti ní, ta funguje, ale mícháte tady jablka a hrušky dohromady ;)
Ta fce vám najde poslední řádek, který má vyplněnou nějakou buňku.
UsedRange naproti tomu může zasahovat ještě mnohem dále.
Lehce nasimulujete takto
Do C3 vložte jakoukoliv hodnotu.
Do C15 vložte jakékoliv formátování - třeba spodní ohraničení.
Fce vrátí 3
Usedrange má poslední řádek 15 (pokud jste tam dal xlThick tak asi 16 ;) )
ne nejde
musel bysteshArray(I).Cells(1,2) = shArray(I).Cells(2,2), ale to už je cyklus.
Takže je to na zvážení, co je v tu chvíli praktičtější.
Jsou případy, ve kterých je výhodnější použít Select než vymýšlet nějaké složitosti. A tohle je asi jeden z nich ;)
Existuje sice možnostDim shArray As Sheets
Set shArray = Sheets(Array("List1", "List2", "List3"))ale potom stejně budete pracovat v cyklu ;)
Bo bug ;)
Přiznám se, že jsem vyhledával jen trochu, protože věřím, že jste hledal a nenašel. A to, že jsme nic nenašli naznačuje, že jste buď první, kdo to objevil, ale pravděpodobněji to nikdo neřešil.
Začátečník na to nenarazí, protože ještě nepoužívá UsedRange a když už, tak pravděpodobně ne ve spojení s xlThick.
Pokročilý na to nenarazí, protože už nepoužívá UsedRange a když už, tak určitě ne ve spojení s xlThick.
Pochopil jsem, že jen zkoušíte. Ale je to o návycích - proto vám vytýkám ten Select, protože už byste ho neměl použít ani tenkrát, když si jen něco zkoušíte ;)
Pak byste totiž nejdříve udělal:
Dim r as range
Set r = ActiveSheet.UsedRange
'kód
r.SpecialCells...protože víte, že UsedRange se během kódu může změnit (nejen z tohoto důvodu) a proto si ho nejdříve uložíte ;)
A pak byste na to nenarazil ;)))
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.