Myslím, že máte na PC nainstalovanou min. express edici sql server-u , a že koketujete s sql.
Áno, oboje je pravda a mám podozrenie, že s inštaláciou SQL server express ste mi pomáhal práve Vy
Pravdou je i to, že mám za sebou nejaké pokusy s ADO, MS Query používam v prípade, že potrebujem jednorazovo dostať nejaké veci z Accessu a nechcem v Accesse tvoriť ďalší jednorazový dotaz. Proti Vám som ale v týchto veciach obyčajný břídil, skutočne pochybujem, že by Vám zrovna moje postrehy v tejto problematike k niečomu boli. Ale sľubujem, že SQL server v blízkej dobe už začnem naozaj študovať serióznejšie, v aktuálnej práci mi síce stačí Access a už tak predčím znalosťami kolegov z práce, ale treba myslieť i na prípadnú zmenu zamestnania a tieto veci ma zaujímajú, takže s motiváciou problém nemám.
Ja Vám rád nejakú spätnú väzbu dám, akonáhle usúdim, že mám čo k veci povedať, nebojte
ešte ma napadlo: Profil na LinkedIn máte, že áno? Skúste kontakt na osobu menom Craig Hatmaker, myslím, že s ním by ste si mohli predávať vzájomné hodnotné skúsenosti. Craig určite nebude proti..
Ošetrenie veľkosti okna by šlo vyriešiť nasledujúcou modifikáciou predošlého kódu:Sub RedrawTb()
Dim ShTb As Shape, cell As Range
Set ShTb = ActiveSheet.Shapes("TextBox 1")
Set cell = Cells(ActiveWindow.ScrollRow, ActiveWindow.ScrollColumn)
ShTb.Top = cell.Top + ActiveWindow.UsableHeight - ShTb.Height - 130
ShTb.Left = cell.Left + ActiveWindow.UsableWidth - ShTb.Width - 50
Set ShTb = Nothing
Set cell = Nothing
End Sub Takto by to už malo byť skoro dokonalé, si myslím
Bunky, ktoré dajú želaný súčet, sa dajú zistiť napr. pomocou Riešiteľa (Solver) s následným použitím filtra.
Bude potrebné zachytiť udalosti, kedy má dôjsť k prekresleniu textboxu, ako vhodná mi príde Worksheet_SelectionChange.
Do nej potom zakomponovať (prípadne z nej volať) niečo v tvare:Sub RedrawTb()
Dim ShTb As Shape, cell As Range
Set ShTb = ActiveSheet.Shapes("TextBox 1")
Set cell = Cells(ActiveWindow.ScrollRow, ActiveWindow.ScrollColumn)
ShTb.Top = cell.Top + 10
ShTb.Left = cell.Left + 10
Set ShTb = Nothing
Set cell = Nothing
End SubS konštantnou časťou hodnoty vlastnosti Top a Left je potrebné si pohrať, ja ten textbox dostanem do rohu obrazovky na ntb pri hodnotách
ShTb.Top = Cells(ActiveWindow.ScrollRow, 1).Top + 300
ShTb.Left = Cells(1, ActiveWindow.ScrollColumn).Left + 800
bude záležať asi na rozlíšení a určite na zväčšení súboru. Kód, ktorý by to všetko mal ošetriť (plus situáciu, kedy okno nebude maximalizované atd), by ale musel byť už krapet zložitejší a mám za to, že hore uvedený by mal pre bežné použitie plne postačovať potrebám.
To, čo popisujete, je úplne iná liga, než ktorú som schopný zatiaľ hrať ja. Rád by som diskutoval, ale tu, priznám sa, nemám znalosti, ktorými by som sa čo i len priblížil...
@eLCHa
je to pouze variace na to, co jste tu vložil Vy
Ten s tou sumou áno, tiež som ho z toho dôvodu pochopil okamžite, akonáhle som ho uvidel.
U toho s FREQUENCY musím kriticky uznať, že si nie som istý, že by som ho dal bez toho, aby som ho predtým videl. I toto je síce iba o cviku a predstavivosti, ale FREQUENCY som, zrejme ku vlastnej škode, snáď ešte nikdy nepoužil.
Inak tie slová, ktoré máte za marjankajove, o tej spokojnosti, sú moje, ale to je detail.
Každopádne, súhlasím s tým, že štúdiom prístupu iných je možné sa mnohému naučiť.
lubo, výborné, ďakujem
@marjankaj
Ja Ti rozumiem, to samé som už písal hore, že zadanie nie je jednoznačné. Riešil som to tak, ako som to pochopil ja, bola to len taká akademická úvaha. Je mi v podstate jedno, či som zadanie pochopil správne, to je úloha OP, aby vysvetlil zrozumiteľne, čo chce získať. Ja som si istý, že som spočítal správne to, čo som spočítať chcel a to mi stačí, som so sebou spokojný
Problém je v tom, že v súbore Kritéria.xlsm na Liste1 v stĺpcoch C až H nemáš čísla.
Do makra Private Sub CommandButton1_Click() za riadok:
.TextFileFixedColumnWidths = Array(8, 6, 12, 9, 9, 10, 10)
pridaj riadok:
.TextFileDecimalSeparator = "."
Odstráň z kódu (alebo zakomentuj):
'Columns("A:L").Select
'Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
'SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
'ReplaceFormat:=False
edit: Už to toľko nerieš, či je niekto nešťastný, alebo nie. Internet je slobodný priestor, máš právo si písať, čo chceš; výsledku sme sa zatiaľ dobrali, takže žiadny problém.
@eLCHa
njn, alibisticky som napísal: nie že by to nešlo, ale mne by to trvalo dlhšie, vymyslieť to bez VBA než napísať to vo VBA.
Tento:=SUM(IF((LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(ROW(INDIRECT("1:255"))),""))),1,0))
je vcelku jednoduchý na pochopenie, i keď by som asi to INDIRECT eliminoval
tento: =COUNT(1/FREQUENCY(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)),ROW(INDIRECT("1:255")))) je trochu náročnejší na pochopenie, oceňujem chytré použitie funkcie frequency.
Pekné vzorčeky, ale ako píšem, ich pochopenie (toho druhého) mi trvalo dlhšie, než napísanie UDF, ktorej rozumiem. Občas si rád niečo skúsim sám; času mám v posledných dňoch dosť, ležím doma už nejakú dobu po operácii chrbtice, tak tluču špačky, učím sa na skúšky z myslivosti a cvičím sa v riešení excelovských blbiniek
@marjankaj:
vzorce z eLCHa googlingu dávajú počet jedinečných znakov, na výsledok z mojej UDF sa dostanú, pokiaľ od dĺžky reťazca sa odpočíta hodnota z eLCHa vzorca. To beriem, že je to v podstate to samé a uznávam, že v exceli riešiteľné
Len pre zaujímavosť, k tomu pôvodnému zadaniu (počet stejných znaků v textovém řetezci):
Povedzme, že v bunke A1 budem mať reťazec v tvare:
AaaaBb c cD1
hľadám počet opakujúcich sa znakov, rozlišujem veľkosť u písmen; jedná sa o znaky:
a: vyskytuje sa 3x, t.j. opakuje sa po prvom výskyte ešte2x
c: vyskytuje sa 2x, t.j. opakuje sa po prvom výskyte ešte raz
medzera: detto ako u znaku c
Výsledok by teda mal byť 4 (takto to chcem a chápem opakovanie, proste, chcem výskyt každého znaku v reťazci započítať iba raz, výsledok (počet duplicitných znakov) teda chápem ako rozdiel dĺžky pôvodného reťazca voči dĺžke reťazca, v ktorom sa každý zo znakov vyskytne iba raz. Toto už by šlo na úrovni excel funkcií poskladať veľmi problematicky (asi by to šlo, ale vymyslieť na to vzorec určite nebude aspoň v mojom prípade otázka pár minút), ale dá sa vytvoriť UDF, ktorá to hravo zvládne:Function DuplCharCount(cell As Range)
Dim myCol As New Collection, i As Integer
For i = 1 To Len(cell)
On Error Resume Next
myCol.Add Item:=Mid(cell, i, 1), Key:=CStr(Asc((Mid(cell, i, 1))))
On Error GoTo 0
Next i
DuplCharCount = Len(cell) - myCol.Count
End Function
JOHAN,
počet stejných znaků v textovém řetezci
je podstatne zložitejší problém, než to, čo si uviedol v príklade:
Zde potřebuji např. počet mezer ve větě z A1.
Napr. u reťazca aaabbbbc by malo byť rovnakých znakov koľko? 2, 5 alebo 7? To zadanie nie je jednoznačné, výsledok potom bude vecou interpretácie nejednoznačného zadania.
Ten druhý problém je celkom jednoduchý, dá sa trebárs cez:=LEN(A1)-LEN(SUBSTITUTE(A1;" ";""))(medzi slovami která a vrátí máš 2 medzery, preto výsledok z príkladu je 9).
jo vlastne, Pecháček, pán Poláček je u nás v práci...
Ja mám možnosť prepnúť sa do CZ, ale znamená to vždy zatvorenie a otvorenie Excel, na to som zas ja príliš pohodlný . Hodilo by sa mi niečo na spôsob kódovej stránky, čo by určilo jazyk, do ktorého sa má vzorec preložiť. Ale pokiaľ neviete, určite to kvôli mne nehľadajte, ja si s EN bohate vystačím, pokiaľ mi sem dá niekto český vzorec, tak by ma hanba fackovala, keby som žiadal jeho preklad a pohodlní OP budú musieť, pokiaľ o preklad skutočne stoja, si holt moje EN vzorce preložiť na svojich mašinkách sami, prípadne i za použitia Vášho šikovného návodu.
@eLCHa: to je šikovný spôsob a díky za jeho publikovanie.
Začal som ho používať, keď niekomu radím na LinkedIn. V mojom prípade iba z prostého dôvodu náhrady oddeľovačov (bodkočiarky za čiarku), páč mám síce EN jazyk, ale CZ oddeľovače. Pokiaľ by ešte existoval spôsob, ako preložiť vzorec z jednej lokalizácie do inej (v mojom prípade z EN do CZ pri zachovaní jazyka EN), tak by som snáď bol ochotný tie vzorce prekladať i do češtiny. Na druhej strane, kladiem si otázku, prečo by mal niekto prekladať vzorec v tomto prípade JOHANOVI, ktorý má určite google, kde si môže pri skutočne minimálnom úsilí preklad zistiť, ale miesto toho čaká často i pár hodín, než mu to niekto preloží. V uvedenom prípade sa jedná o prkotinu, ale u mnohých funkcií ich český názov nepoznám a pokiaľ by som ich mal do češtiny preložiť, tak sám pôjdem hľadať, napr. na excelplus.net pána Poláčka a to môže nejaký pohodlný OP tiež
Áno, šlo iste, ale písal som, nechce sa mi , dá sa to pochopiť?
Tu to máš, ale tým už naozaj končím:Sub doPrint()
Dim MySh As Worksheet, MyRng As Range, MyArr()
Set MySh = Sheets("Přehled")
With MySh
Set MyRng = .[D4]
Set MyRng = MyRng.CurrentRegion
Set MyRng = Intersect(MyRng, .[C:C])
If WorksheetFunction.CountA(MyRng) > 0 Then
Set MyRng = MyRng.Offset(1, 0).Resize(MyRng.Rows.Count - 1, 1)
MyArr = MyRng
MyArr = WorksheetFunction.Transpose(MyArr)
Sheets(MyArr).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1 ', Collate:=True, IgnorePrintAreas:=False
MySh.Select
Set MyRng = Nothing
Erase MyArr
End If
End With
Set MySh = Nothing
End SubDoporučujem v názvoch listov nepoužívať diakritiku..
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.