@vovka
Máte pravdu. Já se jim nevyhýbám a to přesně z důvodů, které jste popsal. A to se řadím mezi ty, kteří se bez nich dokážou obejít. Na druhou stranu, jeden významný argument proti nim jste tady vložil vy sám: http://wall.cz/index.php?m=topic&id=29369#post-29396
Původně jsem své vzorečky vkládal do Listu1, pak jsem si všiml skrytých sloupců a odstěhoval jsem se na List2. Bohužel jsem špatně zrekonstruoval List1, a on pak blbě počítal
Takže, pokud je to řešení pro mne, použiju. Pokud je to pro někoho jiného, zvažuji, kde dotyčný nadělá menší paseku ;)) .
@AL
Nebuď hnidopich :)
@AL
worksheet a Kill? Opravdu? A proč budeš ten tempsheet vůbec ukládat. ;))
@Chatar
Tudíž potřebuji znát číslo řádku, pod (nebo nad) který budu nové jméno vkládat. NEMŮŽU! to ale udělat tak, že jej vložím na konec a setřídím Excelem.
Vložte hodnotu nakonec a pak použijte seřazení pomocí VBA s přepsáním hodnot. Použijte ALovu proceduru.
Já jen tak na okraj.
AL to tu už uvedl - StrComp a je to vyřešené (ikdyž nachápu, proč do toho tahá tempsheet a Kill ;)) ). Mě to jen zajímalo, a tak jsem zkusil následující. Pokud víme, že na listu to funguje a ve VBA ne, můžeme použít nástroje z listu - a pak trošku komplikovaně "=", ">", "<".
Function BubbleSort(List())
Dim i As Integer, j As Integer, Temp As String
For i = LBound(List) To UBound(List)
For j = LBound(List) To UBound(List)
If Evaluate("""" & List(i) & """<""" & List(j) & """") Then
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
End Function
Nebo "nebublinkově"Sub subSort()
Dim sSorted() As String
ReDim sSorted(1 To Selection.Rows.Count)
Dim i As Long
For i = 1 To UBound(sSorted)
sSorted(Evaluate("=SUMPRODUCT((" & Selection.Cells(i).Address & ">" & Selection.Address & ")/1)") + Application.WorksheetFunction.CountIf(Selection.Resize(i, 1), Selection.Cells(i))) = Selection.Cells(i).Value
Next i
Selection.Value = Application.Transpose(sSorted)
End Sub
@vovka
Nevím ale, že by Windows nabízel také tvorbu zipů.
Win 7 - v pozdějších to bude podobné
Pravé tlačítko - Odeslat - Komprimovaná složka (ZIP)
@elninoslov
žádný problém.
Google Chrome
@vovka
Zbytečně ostrá odpověď...
Nerozumím.
Jen tak jsem koukl. Za poslední dobu založil vary 3 vlákna a poté už ani jediná reakce...
@vovka
Naopak, je to velmi logické.
https://en.wikipedia.org/wiki/Visual_Basic_for_Applications
Pokud chcete kódy Ascii - použijte KeyPress místo KeyDown
Key codes neidentifikují znak, ale klávesu. Klávesa pro "a" je stejná jako pro "A" - proto má stejný kód. Pokud je potřebujete rozlišit, můžete to udělat pomocí argumentu Shift.
Ne, nesouhlasím. To není ZOO ze strany MS, ale nepochopení z vaší strany.
edit:
Nenašel jsem tam ale žádné logické vysvětlení, proč mají klávesy numerické klávesnice jiné hodnoty KeyCode než jejich "dvojčata" z velké klávesnice.
Jsou to jiné klávesy.
Díky všem, kdo to zkusili ;)
@lubo
Máte pravdu. Ono mi to v hlavě vystřelilo úplně zničeho nic, zrovna jsem dělal něco jiného.
Po čase mi došlo, že využití ve vzorcích bude asi menší než jsem doufal. Zadání už tu bylo, tak jsem ho neměnil. Obecné řešení pro odstranění diakritiky jsem ale hledal už dlouho. Pro VBA je to pro mne tím pádem přínos. Na listu bude v tomto případě asi téměř vždy lepší UDF.
Navíc jsem přišel na snadný způsob, jak vzorcem (a tentokrát bez pomocných sloupců ;) ) zjistit, zda se na určité pozici nachází písmeno nebo jiný znak nebo kdy nejdříve se v řetězci nachází "nepísmeno". A to se také může hodit.
Mimochodem - toto bude fungovat i mně i angličanovi a nemusím řešit lokalizaciPrivate Sub txtNumber_GotFocus()
With txtNumber
.Text = Format(.Text, vbNullString)
End With 'txtNumber
End Sub
Private Sub txtNumber_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
With txtNumber
Dim sVal As String
If Len(.Text) = 0 Then
sVal = Chr(KeyAscii) & "0"
Else
sVal = Left$(.Text, .SelStart) & ChrW(KeyAscii) & Mid$(.Text, .SelStart + 1)
End If
If Not IsNumeric(sVal) Then
KeyAscii = 0
End If
End With 'txtNumber
End Sub
Private Sub txtNumber_LostFocus()
With txtNumber
.Text = Format(.Text, "#,##0.00")
End With 'txtNumber
End Sub
Naopak varymu to nepomůže, protože (nechápu proč) vkládá textbox do listu programově. Těžko tak bude přiřazovat tomuto prvku události. Tedy ten prvek nevytvářet programově, ale ručně a pouze zobrazovat/skrývat.
@elninoslov
Nemusel. Stačí použít nápovědu.
https://msdn.microsoft.com/en-us/library/aa243025%28v=vs.60%29.aspx
edit:
asi byste opravdu neměl o půlnoci ten excel otevírat ;)))
Namátkou:
vknullstring
"#.##0"
Mno
ALovi je to jedno ;) a nikdo další se neozývá, nebudu vás tedy napínat.
Lze použít maticový vzorec:=IFERROR(ZNAK(64+POZVYHLEDAT(ČÁST($A2;B$1;1);ZNAK(ŘÁDEK($A$65:$A$90)))+KDYŽ(JE.CHYBHODN(NAJÍT(MALÁ(ČÁST($A2;B$1;1));ČÁST($A2;B$1;1)));0;32));ČÁST($A2;B$1;1))=IFERROR(CHAR(64+MATCH(MID($A2;B$1;1);CHAR(ROW($A$65:$A$90)))+IF(ISERROR(FIND(LOWER(MID($A2;B$1;1));MID($A2;B$1;1)));0;32));MID($A2;B$1;1))
nebo nematicový=IFERROR(ZNAK(KÓD("A")-1+POZVYHLEDAT(ČÁST($A2;B$1;1);{"A";"B";"C";"D";"E";"F";"G";"H";"I";"J";"K";"L";"M";"N";"O";"P";"Q";"R";"S";"T";"U";"V";"W";"X";"Y";"Z"})+KDYŽ(JE.CHYBHODN(NAJÍT(MALÁ(ČÁST($A2;B$1;1));ČÁST($A2;B$1;1)));0;32));ČÁST($A2;B$1;1))=IFERROR(CHAR(CODE("A")-1+MATCH(MID($A2;B$1;1);{"A";"B";"C";"D";"E";"F";"G";"H";"I";"J";"K";"L";"M";"N";"O";"P";"Q";"R";"S";"T";"U";"V";"W";"X";"Y";"Z"})+IF(ISERROR(FIND(LOWER(MID($A2;B$1;1));MID($A2;B$1;1)));0;32));MID($A2;B$1;1))
Pochopení vzorce nechám na vás ;) .
Bezpečnější je samozřejmě ten nematicový, protože ho neovlivní odstraňování/přidávání řádků.
Využití na listu, v UDF nebo procedurách. Já už od teď žádné řetězce používat nebudu ;))
Obecně povolovat znaky je velmi nepraktické. Lepší je testovat, zda nový obsah je jakékoliv "číslo" a v tom případě změnu povolit.
V příloze je řešení, které nevyhovuje zadání. Schválně jsem tam nechal i špatné výsledky, aby bylo vidět, že i když jsem se snažil, přesto mi některé znaky unikly.
Nevyhovuje proto, že jsou použity 2 řetězce - jeden s diakritikou a jeden bez.
Dávám ji sem proto, abyste tedy nemuseli nic vytvářet a nahradili nevyhovující vzorce za vyhovující.
Mimochodem, 2. nápověda (a v podstatě řešení) by opravdu byla POZVYHLEDAT
Ano. Je třeba text rozdělit na jednotlivé znaky. Možná lze sestrojit nějaký maticový vzorec, ale tím jsem se nezabýval. Takže v pomocných sloupcích mám jednotlivé znaky.
1. nápověda
Dejte si do sloupce pod sebe náhodné znaky, stačí pár tak 10-15. Některé s diakritikou, některé bez, některé velké a některé malé. A pak si je seřaďte.
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.