No a kde je tá Vaša faktúra, aby sme videli čo to robí za šarapatu, kde je aký zdroj umiestnený, ako sa mení, náväznosti polohy zdroja od zmeny čísla fak. a pod. ?
Alebo nahraďte toto
ThisWorkbook.Worksheets(1).Copy
ActiveWorkbook.SaveAs Filename:="D:\Data_" & Format(Now, "dd.mm.yyyy hh-mm-ss") & ".csv", FileFormat:=xlCSV, Local:=True
ActiveWorkbook.Close (False)
týmto
i = FreeFile
Open "D:\Data_" & Format(Now, "dd.mm.yyyy hh-mm-ss") & ".csv" For Output As #i
Print #i, Join(Pole, vbCrLf)
Close #i
a bude to rýchlejšie.
No a čo vstupný zostatok z minulého obdobia/predošlej karty ?
PS: Bez urážky, ak tápete nad SUM(), čo potom asi robíte s tým "šifrovacím" algoritmom v makre ?
Prípadne ešte zmeniť SUMIFS na SUMIF, teda prvú položku poľa Array() zmeniť
z
"=SUMIFS(DATA!$B$2:$B$" & PoslRadekD & ",DATA!$A$2:$A$" & PoslRadekD & ",$B5)"
na
"=SUMIF(DATA!$A$2:$A$" & PoslRadekD & ",$B5,DATA!$B$2:$B$" & PoslRadekD & ")"
Teda celý riadok bude:
.Formula = Array("=SUMIF(DATA!$A$2:$A$" & PoslRadekD & ",$B5,DATA!$B$2:$B$" & PoslRadekD & ")", "=VLOOKUP($B5,DATA!$A$2:$B$" & PoslRadekD & ",2,FALSE)", "=COUNTIF(DATA!$A$2:$A$" & PoslRadekD & ",$B5)")
Skúste toto:
Sub MALED()
Dim PoslRadekV As Long, PoslRadekD As Long
PoslRadekD = wsData.Cells(Rows.Count, 1).End(xlUp).Row
If PoslRadekD < 2 Then MsgBox "Žádná data v liste DATA.", vbExclamation, "Chyba": Exit Sub
With wsVypocet
PoslRadekV = .Cells(Rows.Count, 2).End(xlUp).Row
If PoslRadekV < 5 Then MsgBox "Žádná data v liste VÝPOČET.", vbExclamation, "Chyba": Exit Sub
Application.ScreenUpdating = False
With .Cells(5, 3).Resize(PoslRadekV - 4, 3)
.Formula = Array("=SUMIFS(DATA!$B$2:$B$" & PoslRadekD & ",DATA!$A$2:$A$" & PoslRadekD & ",$B5)", "=VLOOKUP($B5,DATA!$A$2:$B$" & PoslRadekD & ",2,FALSE)", "=COUNTIF(DATA!$A$2:$A$" & PoslRadekD & ",$B5)")
.Value = .Value
End With
Application.ScreenUpdating = True
End With
End Sub
Príklad
Mne by to dávalo zmysel približne takto:
-Ak dosiahne hodnota skladu minimálnu hodnotu 5 - upozornenie na dosiahnutie minimálneho stavu.
-Ak je stav medzi 1-4 (vrátane) - upozornenie na dochádzanie produktu.
-Ak je stav 0 - upozornenie na chýbajúci produkt (tu nechápem použitie makra s názvom "Aktuálne", žeby v zmysle "Je aktuálne priobjednať ďalšie kusy" ??? To sa má robiť pri dochádzaní, nie ?).
- Treba zobrazovať všetky druhy správ, lebo pri viacnásobnej zmene (viac buniek naraz), môže dôjsť k rôznym stavom.
-Treba myslieť nielen na rôzne stavy, ale aj na výpis konkrétnych produktov v konkrétnych stavoch.
-Táto komplexná správa musí vynechať prípadné nepoužité stavy.
-Táto komplexná správa musí mať ikonu najvyššej použitej priority. Preto som pridal, logicky, informačnú ikonu pri dosiahnutí minimálneho stavu 5.
Všetko uvedené obsahuje toto riešenie. Dá sa to vylepšiť, napr. tým, že sa použijú kolekcie, a vylúčia sa duplicitné položky.
Ale. O koľko sa má jednať riadkov ? Je tento počet riadkov stále rovnaký ? Ak nie, čo určuje posledný riadok ? Takéto "upozornenie" by sa dalo asi riešiť (ak položiek nebude 100 000) aj vzorcami tak, že by maticové vzorce, vypisovali vedľa všetky položky, na ktoré treba upozorniť + Podmienené formátovanie. A bolo by to bez makra.
Treba ďalšie info ...
Vyskúšajte či som obsiahol všetky možnosti...
A kde je potom koniec pracovnej doby ? Priložte reálnu prílohu s reálnym rozmiestnením a reálne vyplnenými hodnotami, v ktorých budú zastúpené všetky možnosti, ktoré môžu nastať.
Úprava vzorcov aj makra. Skúste nájsť rozdiel v makre tých dvoch hárkov. Tam bola chyba.
Application.EnableEvents - použite iba ak potrebujete (v popise)
Tak to bude musieť byť asi len makro. Pr.
XLS je starý typ a môže obsahovať makrá, naproti tomu xlsx je novší typ bez možnosti obsahu makier. Na súbor s obsahom makier je xlsm.
Tak malú šírku to považuje za 0.
Dim DisableEvents As Boolean
Const SIRKA_MALA = 0.01
Const SIRKA_VELKA = 10
Private Sub ckbSloupec2_Click()
ZmenaSirky ckbSloupec2
End Sub
Private Sub ckbSloupec3_Click()
ZmenaSirky ckbSloupec3
End Sub
Private Sub ckbSloupec4_Click()
ZmenaSirky ckbSloupec4
End Sub
Private Sub UserForm_Initialize()
DisableEvents = True
ckbSloupec2.Value = List1.Columns(2).ColumnWidth <= SIRKA_MALA
ckbSloupec3.Value = List1.Columns(3).ColumnWidth <= SIRKA_MALA
ckbSloupec4.Value = List1.Columns(4).ColumnWidth <= SIRKA_MALA
DisableEvents = False
End Sub
Sub ZmenaSirky(ckb As MSForms.CheckBox)
If DisableEvents Then Exit Sub
Select Case ckb.Value
Case True: List1.Columns(CByte(ckb.Tag)).ColumnWidth = SIRKA_MALA
Case False: List1.Columns(CByte(ckb.Tag)).ColumnWidth = SIRKA_VELKA
End Select
End Sub
Metóda SpecialCells je v prílohe tiež :)
Také ružové to nieje. A navyše sa nemá hľadať posledný riadok, ale prvá prázdna bunka. Čo je niečo úplne iné. Lenže k nájdeniu správneho riešenia je treba správne zadanie. A to tu absentuje. Kde je ukážková príloha ?
Posielam zopár modelových situácií aj s riešeniami, a upozornením na niektoré možné problémy.
Prípadne sa dá použiť ešte aj Cells(y,x).Find(...)
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.