Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  196 197 198 199 200 201 202 203 204   další » ... 298

Rozdiely sú 2:
1. Range() pracuje s textovou adresou bunky "E6", a Cells() pracuje so súradnicami Cells(6, 5) - šiesty riadok a piaty stĺpec.
2. Druhý rozdiel je to With Data. Vlastnosť Name listu "Data" je zmenená na Data. Teda CodeName listu je Data. Tá bodka pred ".Cells()" znamená, že sa jedná o objekt podriadený objektu vo With, teda je jasne dané, že sa pracuje s hodnotami v liste Data. Ak by tam tá bodka pred "Cells()" nebola, znamená to, že sa pracuje s práve aktívnym listom. Použitie zaleží na konkrétnej situácii, či sú dáta v liste Data, ktorý je zároveň aktívny alebo nie.

To isté s bodkou a With platí aj pre textovú adresáciu Range.

Použil som teraz inú metódu (trošku rýchlejšiu). Ak by malo byť tých riadkov naozaj veľa, tak ma napadá ešte najskôr cez SpecialCells poriešiť hromadne prázdne bunky a následne cez pole (tak ako teraz), zaplnené aby sa to zase trošku zrýchlilo.

EDIT: marjankaj, sry hrubka, samozrejme prvé má byť False - opravené

???
Sub VlozText()
Dim Riadkov As Long, Bunka As Range, HDN, Dlzka As Long, Text As String * 15
Text = "Začiatok" & Chr(10) & "Koniec"

Application.ScreenUpdating = False

With Worksheets("makro")
Riadkov = .Cells(Rows.Count, 1).End(xlUp).Row
If Riadkov = 1 And .Cells(1, 1) = "" Then Exit Sub

For Each Bunka In .Columns("O").Resize(Riadkov).Cells
With Bunka
HDN = .Value2
Dlzka = Len(HDN)
.Value2 = IIf(Dlzka = 0, vbNullString, HDN & Chr(10)) & Text
.Characters(Dlzka + IIf(Dlzka = 0, 1, 2), 15).Font.Bold = True
.Characters(Dlzka + IIf(Dlzka = 0, 10, 11), 6).Font.Color = -65281
End With
Next Bunka
End With
Set Bunka = Nothing

Application.ScreenUpdating = True
End Sub

Toto skúste popísať inak, pretože ja osobne nemám ani páru, čo konkrétne Vám nejde, a čo vlastne potrebujete urobiť...

To je ale dosť veľký priekak, že programujete, a neviete čo je Dim, String a Boolean. Už len keď si zadáte do Googlu "vba deklarace promennych"
wall.cz
lasakovi
...
alebo Google - "vba zaklady"
...

Každopádne ja keď idem okolo kníhkupectva (dám iba skratku aby to neporušovalo pravidlá o reklame - PR) v hocijakom nákupnom centre, tak sa stavím mrknúť, a vždy tam majú nejakú knižku o VBA. Myslím, že pre Vás bude irelevantné, či je pre Office 2010/2013/2016.

Príklad, bez overenia validity vstupných dát v bunkách.

Skúste pridať pred with
Application.EnableEvents = False
za End With
Application.EnableEvents = True
a namiesto
.Columns(Stlp)
dajte
.Columns(Stlp).Resize(, 3)

Teda stôl. Či ?

Ak sú tie hodnoty v bunkách výsledkom vzorcov, prečítajte si svoju poslednú vetu, a musíte prísť na to, že to nieje možné. Ak to nie sú výsledky vzorcov, ale zadané hodnoty, tak skúste označiť oblasť, ktorej sa to týka, a Domov - Nájsť a vybrať - Nahradiť.

Skúste. Ukladá sa to pri každej interakcii, aj pri zatváraní. Ak to spadne pri nejakej udalosti, stále je uložená verzia pri poslednej udalosti (START, STOP, uloženie, mazanie).
Pridal som ešte kontrolu časomiery pri zatváraní zošitu.
Urobil som pár zmien, hlavne kvôli neštandardnosti chovania Excelu pri ukladaní cez makro a samotný Excel (bol rozdiel v BeforeSave procedúre). Chovalo sa to divne, ale teraz je to už OK. Teda snáď. Otestujte.

Len si ešte premyslite to zaokrúhľovanie. Či sa má alebo nemá počítať s haliermi. Lebo napr 5 min * 1,33 = 6,65. Počíta sa iba 6 Kč alebo sa má počítať aj tých 65 halierov? Alebo sa má zaokrúhľovať na celé päťdesiatniky 6,50 alebo pod ,50 dole (6,-) a nad ,50 hore (7,-) ?

A ešte rada, aby ste nezsasahoval bez korekcie kódu do rozloženia dát na liste. Makro počíta s presným rozmiestnením, tak ako je teraz. Teda napr. by ste chcel pridať stôl, treba poupraviť makro. Akékoľvek pokusy s nejakými zmenami, aj keď ich môžete bez následkov robiť málo, robte na kópii súboru. To tak treba robiť vždy, keď makro súbor ukladá. Mohli by ste si nevedomky prepísať dôležité dáta.

Ak by ste ako nadriadený chcel napr. vymazať iba niektorý riadok z databáze, tak odomknite list, označte celý riadok za jeho uško (to číslo), pravý klik a Odstrániť, súbor uložte a je znovu zamknutý. Zmenší sa tým o odstránený riadok vzorec v súčte I1. Aj to sa dá vyriešiť viacerými spôsobmi napr.:
=SUM(INDIRECT("E10:E20000"))
=SUMA(NEPŘÍMÝ.ODKAZ("E10:E20000"))


alebo maticový vzorec (po napísaní Ctrl+Shift+Enter)
=SUM(E9:INDEX(E:E;MAX((E:E<>"")*ROW(E:E))))
=SUMA(E9:INDEX(E:E;MAX((E:E<>"")*ŘÁDEK(E:E))))

Skúsim zjednodušene: To, že ho odomknete cez Revíziu, nieje problém, problém by bol, ak by ste ho znovu cez Revíziu zamkol. Zamknutie zakazuje všetko, okrem výberu buniek. Zamykanie cez makro má jeden parameter navyše
UserInterFaceOnly
,ktorý zabezpečí, že všetko je zamknuté len pre užívateľa, nie pre makro. Excel cez Revíziu tento parameter nezadá, teda zamkne list aj pre makro, ktoré potom samozrejme nebude fungovať.
Ja som počítal s tým, že sa nebude nejak často meniť cena, alebo vzorce a pod, ale aj tak som tam zakomponoval, že stačí súbor uložiť, a je zase korektne zamknutý (s tým parametrom povolenia úprav pre makro).
Teda si ho môžete odomknúť, len ho zamknete tak, že súbor uložíte.

Celý kód si môžete pozrieť keď stlačíte ľavý Alt+F11, vľavo hore si vyberiete Váš VBAProject(názov súboru), a stlačíte to + a vypýta si to heslo do makra, ktoré je teraz
abc359
Toto heslo si teraz môžete zmeniť na iné v Tool - VBAProject Properties - Protection - dole 2x vyplníte nove heslo do makra - OK - uložte súbor.

Vo všetkých častiach, je nejaká časť kódu:
Microsoft Excel Objects - Stoly (Stoly)
Microsoft Excel Objects - ThisWorkbook
Forms - frmPass
Modules - modStoly

na všetky stačí dvojkliknúť, len na frmPass treba pravý klik a View Code.

V tom poslednom modStoly, sú na začiatku 2 konštanty
PSW = "abc359"
PSWDB = "359"


PSW - je heslo, ktorým je zamknutý list (toto heslo použijete aj pri odomykaní v Revízia)
PSWDB - je heslo, ktoré sprístupňuje vyčistenie databáze

Môžete si ich tu zmeniť, súbor po zmene uložte. Ale pozor, pred zmenou hesla PSW je potrebné list najskôr odomknúť pôvodným heslom PSW (buď v Revízia, alebo spustením makra Odomknut v module modStoly (kurzor do makra Odomknut, a F5). Toto ale predpokladám urobíte tak raz.

Počítanie ceny : Je to nastavené na zaokrúhlenie dole. Teda vynechá desatinnú časť. Neviem ako to chcete, zatiaľ som to urobil takto.

Jediné čeho jsem si všiml po opětovném zamčení, že konečná cena nebyla fixovana a po opětovném zapnutí stolu se nulovala.

Tomuto nerozumiem. Skúste popísať inak.

Po stlačení stop sa suma a časy nenulujú naschvál (iba po stlačení START), aby personál hneď videl výsledok, aj keď ten vidí vždy aj v spodnej časti, ale tá sa dá omylom nascrolovať. Kľudne sa to dá urobiť tak, že po STOP sa všetko zapíše do databázy dole, a hore sa to okamžite zmaže. To nieje problém.

Urobil som ešte nejaké malé korekcie.

Rozmýšľam ešte, že by som tlačítko Vyčistit nahradil za Administrace, kde by bola aj možnosť jednoduchého odomknutia/zamknutia listu, zmeny hesiel, vyčistenia, ale už sa mi nechce.

A celé makro sa mi už vôbec nechce popisovať vysvetľujúcimi popismi ...

Ja som to dnes pojal takto.
heslo na vstup do makra a listu je "abc359"
heslo pre čistenie časov a DB je "359"

Neodomykajte list s tým heslom "abc359" cez kartu Revízia. Pri následnom zamknutí Excel potom nesprávne nepovolí zmeny ani makru.
Vlastne to ani nepotrebujete nijak odomykať, len pri zmene hesiel.

No s tým Vašim súborom som začal teda pracovať, a prišiel som na množstvo čiastkových problémov, a poprerábal som tam veľa vecí. Nechce sa mi to písať všetko. Mám tu rozrobenú verziu, pozrite sa na to, či by to takto mohlo byť, a či ísť týmto smerom. Je tam úplne nový algoritmus zoraďovania oddelení, ktorý už nerozbíja podmienené formátovanie, mali ste tam nesprávne oblasti v súčtoch operácií, teda Vám to dávalo zlé výsledky v niekoľkých súčtoch. Proste kopec vecí.

Ale aj tak mi to príde stráášne zložité. Napr. ak by nemuseli byť tie oddelenia v zadanom poradí, tak by sa dal na zlúčenie (zaradenie novo dopísaných) namiesto tohto relatívne zložitého algoritmu použiť obyčajný filter, a aj tie poradové čísla by sa nemuseli makrom riešiť, mohol by ich riešiť vzorec COUNTIF.

Spočítavanie času mi príde divné. Na jednom liste pripočítate k celým hodinám za jednotlivé oddelenia, aj počet hodín za zvyškové minúty v oddeleniach dokopy. Ale v druhom liste, už s nimi nerátate. Ja by som to prerobil na zadávanie časov vo formáte 3:30, 1:45 v jednom stĺpci namiesto 3 + 30 a 1 + 45 s samostatných stĺpcoch.

Chcete tam počítať skutočne s počtom pracovných dní, alebo tým máte na mysli počet dní mesiaca. To je rozdiel.

Upravené PF, overenie dát, vzorce ... inak vzorce sú robené tak ako sú, kvôli tomu, že na základe vzorcov SUMPRODUCT, formátu súboru, a pod, predpokladám nasadenie v Office 2003, ktorý nemá niektoré novšie funkcie ako SUMIFS/COUNTIFS.

atď...

Vyskúšajte, dajte vedieť. Je to iba rozrobená verzia, pokusy robiť VÝHRADNE NA KÓPII DÁT V SAMOSTATNOM ADRESÁRI, kvôli prepisovaniu súborov.

Sákriš, ide Vám to stiahnuť ? JA dostanem vždy hlášku

Vámi požádovaná stránka nebyla nalezena.


Strana:  1 ... « předchozí  196 197 198 199 200 201 202 203 204   další » ... 298

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