Příspěvky uživatele


< návrat zpět

Strana:  « předchozí  1 2 3 4 5 6 7 8 9   další » ... 16

Chtělo by zapracovat na systému nastavení kontrol, vytvořit číselník četnosti provedení, zápisy provedených prohlídek (např. u karty strojů v řádku úkonu), pak se dá dopočítat následné provedení kontroly a není nutné mít vyplněno 52 sloupců, když se dá pak podle dat vygenerovat jen ten příslušný týden. Takhle vlastně není stanoven odstup jednotlivých úkolů mezi sebou, tedy kdy byl úkon proveden a kdy má být proveden další.

List plán by se tak dal generovat podle aktuálních dat a nebylo by nutné mít předdefinováno pro každý stroj 6 řádků natvrdo.

Jinak kód pro vytvoření seznamu k tisku
'********************************************************
Columns("E:BE").Select
Selection.EntireColumn.Hidden = True
cislosloupce = 5 + hodnota2
...
'*****prvni týden****************************************
If cislosloupce = 6 Then
Columns("F:F").Activate
Selection.EntireColumn.Hidden = True
Columns("F:F").ColumnWidth = 50
tydenc = Range("F1")
Range("A1").Activate
Set Rng = Range("F1:F577")
i = 1
For counter = 1 To Rng.Rows.Count
If Rng.Cells(i) = 0 Then
Rng.Cells(i).EntireRow.Hidden = True
i = i + 1
Else
i = i + 1
End If
Next
Range("A1").Activate
který se opakuje 52 x lze zapsat do jednoho cyklu, který obslouží jakýkoli týden
With Sheets("Plan")
.Columns("E:BE").EntireColumn.Hidden = True ' skrytí sloupců týdne
cislosloupce = 5 + hodnota2
tydenc = hodnota2
.Columns(cislosloupce).ColumnWidth = 50 ' zviditelnění vybraného týdne
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If .Cells(i, cislosloupce) = 0 Then
.Rows(i).EntireRow.Hidden = True
End If
Next i
Range("A1").Activate
End With


Pokud by mělo jít jen o pouhé generování "plánu", pak bych to asi řešil prachsprostým odpočítáváním týdnů.
1x týdně - 52x
1x za 14 dní - 26x (každý sudý nebo lichý)
1x za 3 měsíce - 4x (1, 13, 26 a 39t)
1x za 1/2 roku - 2x (1 a 26t)
1 x za rok - 1x (52t)
jen netuším od kdy má výpočet začít. Od prvního týdne v roce nebo od nějakého konkrétního datumu?

Aby fungovala makra, musí být sešit otevřen v aplikaci, nikoliv ve webovém prohlížeči.
Z vlastní zkušenosti však takovéto sdílení s použitím maker moc nedoporučuji, protože ani při průběžném ukládání sešitu po provedené změně není zaručeno, že se všechny položky uloží správně a nedojde ke ztrátě dat. Vše závisí na rychlosti SDP (sdíleného diskového prostoru), což se mi na OneDrivu moc neosvědčilo a pokud v jeden okamžik zapisuje více uživatelů nelze 100% zabezpečit uložení všech dat.

Sdílení přes webové rozhraní má také svoje nevýhody, jako je např. přepsání dat jiným uživatelem, pokud si uživatel nevšimne, že v buňce již něco zapisuje jiný uživatel. Zde platí kdo poslední přijde ten vyhraje.

Asi jsem BFU, ale tohle sdílení se nejmenované firmě zřejmě moc nepovedlo, nebo netuším co tím sdílení dat autoři mysleli. Pokud to má být jen pro čtení, pak je to OK, ale ...

Osobně takovou nutnost sdílení řeším jedním souborem, který obsahuje pouze obslužné rutiny (makra) a druhým souborem s daty. Obslužný soubor pak ukládá data do zmíněného datového souboru, který není běžně uživatelům přístupný a je zabezpečeno, že v jeden okamžik do něj zapisuje pouze jeden uživatel.

Jaké položky jsou jedinečné, co se má sčítat a podle jakého kritéria?
sumif
https://support.microsoft.com/cs-cz/office/sumif-funkce-169b8c99-c05c-4483-a712-1697a653039b
sumifs
https://support.microsoft.com/cs-cz/office/sumifs-funkce-c9e748f5-7ea7-455d-9406-611cebce642b

Ukázka by nebyla?

Další možností je použít
Worksheets("jmenoListu").Protect password:="heslo", UserInterfaceOnly:=True

List bude uzamčen pro uživatele, ale makra do něj mohou zapisovat bez nutnosti jej odmknout.
https://learn.microsoft.com/en-us/office/vba/api/excel.worksheet.protect

https://wall.cz/index.php?m=topic&id=55933&page=1#post-55936

Možné řešení:
v buňce A1 je uvedená cesta k souboru, do buňky B1 se uloží název bez přípony.
Sub JmenoBezPripony
Dim aJmeno
Dim jmenoSouboru As String, jmeno As String

jmenoSouboru = Range("A1")
aJmeno = Split(jmenoSouboru, ".", , vbTextCompare)

jmeno = Replace(jmenoSouboru, "." & aJmeno(UBound(aJmeno)), "", , , vbTextCompare)

Range("B1")=jmeno

End Sub

Máte na mysli toto?

Jasné, to mi bohužel došlo, když už jsem to odeslal.

V mém případě ani není nutné mít pomocný sloupec, protože různá data zpracovávám pokaždé jinak seřazená, ale to není podstatné.

Díky za cenné rady a řešení.
I před důchodem se člověk stále učí .. 5

EDIT:
to elninoslov
možná bych doplnil With .Sort
.SortFields.Add2 Key:=rng, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

With .Sort
. SortFields.Clear
.SortFields.Add2 Key:=rng, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

aby se nekumulovaly jednotlivé úrovně filtru každým spuštěním

Seřazení dat byla taky jedna z možností nad kterými jsem uvažoval. Jedno jestli vymazavana oblast bude na konci nebo začátku, hlavně že bude spojitá.

Díky, to jsou právě ty obavy z vysoké stability a spolehlivosti MSO.

Pokusím se upravit pro variabilní oblast dat.

Dobrý den,
pro výmaz nevyhovujících záznamů využívám metodu mazání dat pomocí SpecialCells. Pro řádově 1000 řádků to je obstojná rychlost výmazu, ale při počtech záznamů v řádu desítek a stovek tisíc je to pomalé.

Existuje jiný, efektivní, způsob výmazu velkého množství dat.

Současný kód výmazu:
Sub VymazNepotrebne()
Dim rng As Range
Set rng = Range("D2:D" & Cells(Rows.Count, 1).End(xlUp).Row)
With rng
.Formula = "=IF(A2=1,0,0/0)"
On Error Resume Next
.Cells.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete
.Clear
On Error GoTo 0
End With
Set rng = Nothing
End Sub

A čemu se má uvedený výraz rovnat?

Pokud výraz bude logickou hodnotou, pak bude podmínkou vyhodnocen.

Podle popisu výše to určitě nebude logická hodnota.

Doporučuji deklarovat proměnné a určit jejich datové typy.

bobika99 napsal/a:

dotaz = "(.Cells(5, 2).Value Like "020319??00" Or .Cells(5, 2).Value Like "0203??0000" Or .Cells(5, 2).Value Like "02??000000")"
Proměnná dotaz není logickou hodnotou.

dotaz = .Cells(5, 2).Value Like "020319??00" Or .Cells(5, 2).Value Like "0203??0000" Or .Cells(5, 2).Value Like "02??000000"

Jak jsem již uvedl, podmínka musí být logická

dotaz="5 + 5 = 10"
If dotaz = "5 + 5 = 10" then
' správně
Else
' špatně
End If
Jinak už nevím jak to srozumitelněji napsat.

bobika99 napsal/a:

...ve skutečnosti tam je poskládaná podmínka...
ale proměnná dotaz je textová, podle přikladu.

A co se má vyhodnotit jako správná podmínka?
Podmínka se vyhodnocuje jako logická hodnota, tedy pokud DOTAZ je definován jako "5 + 5 = 10" (to je textová hodnota) musí se s něčím porovnat.
If dotaz = "5 + 5 = 10" then
' správně
Else
' špatně
End If

A1 je buňka, A je sloupec, 1 je řádek

možné řešení v příloze

PavelJanec napsal/a:

...Porovnání bude podle názvu sloupců...

Znamená to tedy, že název sloupce bude v řádku 1?

Názvy sloupců jsou standardní podle typu odkazu (A1 vs R1C1) a jsou to buď písmena nebo čísla.


Strana:  « předchozí  1 2 3 4 5 6 7 8 9   další » ... 16

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse

kontrola buniek

loksik.lubos • 31.5. 20:33

KT jako text do emailu

elninoslov • 31.5. 18:35

vlastní pás karet

elninoslov • 31.5. 15:10

vlastní pás karet

stejzi • 31.5. 13:09

KT jako text do emailu

Začátečník • 31.5. 11:06

odkaz chyba

elninoslov • 30.5. 21:07

odkaz chyba

jano1 • 30.5. 20:31