Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  148 149 150 151 152 153 154 155 156   další » ... 286

Nie, záleží na tom, čo bude na liste s výslednou hodnotou (List1), a čo na liste so zdrojovými dátami (List999).

Bude to takto ako píšem ?

Na liste List1 bude:
-bunka s výberovým zoznamom
-SpinButton

Na liste List999 bude:
-zoznam materiálov
-Poradová hodnota SpinButton-u

V tom prípade nehľadáte delitele ale násobky. Takto ?

Pr.

Snáď jedine makro...

Snáď na to je niečo sofistikovanejšie, ale tento maticový vzorec Vám to zráta. Musí to byť číslo do max čísla riadku v Exceli (1048576). Použil som 2 definované názvy, ale to nemusíte, môžete to zneprehľadniť do jedného maticového (Ctrl+Shift+Enter) vzorca.

Inak výsledok je 6, zabudol ste na číslo 18.

Viď obdobná téma na pc-help

Ak som to správne pochopil, tak tu je príklad. Ukázané sú tam 2 metódy záverečnej ukážky tlače. Ten vypoznámkovaný je ten nový štýl Office, ktorý sme sa tu pred možno 2 rokmi snažili prinútiť aby zastavil makro, pokiaľ nieje okno Tlače zrušené, alebo nieje dotlačené, vtedy sa myslím na riešenie neprišlo. Teraz už možno nejaké známe riešenie je. Problém bol v tom, že je treba pri tomto riešení označiť hárky, dať tlačiť, a po vytlačení odznačiť. Teda buď ostanú označené, alebo ich následný príkaz na odznačenie hneď odznačí (lebo makro nečaká) ešte pred vytlačením. To prinášalo problémy nevytlačenie, alebo označenie viac hárkov, ak si to nevšimnete tak napr pri vymazaní hodnoty v jednom zmažete nechtiac vo všetkých označených listoch. A pod... Ale vravím, možno je riešenie už na svete. Druhá metóda vyvolá staré náhľadové okno, bez nutnosti označovať listy.

Ďalej nieje jasné, či musí A obsahovať číslo, alebo aj inú hodnotu. Zatiaľ je to urobené, že tam musí byť bezpodmienečne číslo, text nestačí.

Mohli ste kľudne pokračovať vo svojom vlákne z 2.2.2018 s rovnakou témou. A možno s tým budú stále rovnaké nelogické problémy, ktoré som tam spomínal :)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Poz As Long

If Not Intersect(Cells(1, 2), Target) Is Nothing Then
On Error Resume Next
Poz = WorksheetFunction.Match(Cells(1, 2), Cells(18, 11).Resize(, 11), 0)
On Error GoTo 0

Application.EnableEvents = False
If Poz > 0 Then
Cells(3, 1) = Cells(17, 10 + Poz)
Cells(17, 10 + Poz).Resize(2) = WorksheetFunction.Transpose(Array(0, "Prázdný"))
Else
Cells(3, 1).ClearContents
End If
Application.EnableEvents = True
End If
End Sub

Ale zase je tu množstvo poznámok. V tej tabuľke sa majú nájsť, spočítať a vymazať všetky výskyty daného dielu (To treba urobiť potom inak)? Alebo iba prvý/posledný? Z ktorej strany? Ak tam nenájde daný diel alebo je B1="", vymaže modrú bunku A3.

Táto príloha potom samozrejme prináša ďalšie a ďalšie otázky s ohľadom na predchádzajúce nedovysvetlené zadanie. Napr. : Hľadáte Vy v predchádzajúcom požiadavku naozaj prvý prípad zprava, keď je splnené že do nejakej bunky sú všetky zaplnené a len tá posledná bunka je prázdna? Alebo hľadáte prvú prázdnu zľava?
Ak tam totiž sú medzery ("prázdne" boxy), tak aj v prvom prípade nastane, že sa naplní box zprava. Mne to príde divné, ale to možno len preto, lebo neposkytujete dobrý (žiadny) popis toho, čo chcete dosiahnuť. Toho čo robíte. Z Vašeho makra nemusí byť vôbec zrejmé čo chcete dosiahnuť, keďže ako laik nemusíte mať uváženú správnu metodiku.

Keď tak pozerám čo robí ten Váš kód resetboxu, tak resetboxu2 robí to isté, nič viac netreba, žiadne ďalšie procedúry ako reseticek1, reseticek2 ... .
Teda robí to to isté, ale vôbec neviem čo 5
Nech je to ale čo chce, tak asi by som si urobil ďalší pokus aj cez polia a pomeril rýchlosť. Záleží aj na množstve buniek, ktoré chcete nakoniec obsiahnuť...
Sub resetboxu2()
Dim i As Long
If Cells(3, 1) <> "" Then
For i = 9 To 1 Step -1
If Cells(21, 1).Offset(0, i) = "" And WorksheetFunction.CountIf(Cells(21, 2).Resize(, i), "<>") = i - 1 Then
Cells(21, 2).Resize(3).Offset(0, i - 1) = WorksheetFunction.Transpose(Array(Cells(1, 1), Cells(5, 1), Cells(3, 1)))
Cells(3, 1) = 0
End If
Next i
End If
End Sub

Skúste priložiť normálnu XLSM prílohu, kde bude lepšie vidieť, čo chcete dosiahnuť (čo testujete a čo dopĺňate), a kde budú aj procedúry "resetnicekX".

Pr.

Áno, dá sa to urobiť aj inak, napr. takto:
=RIGHT(A4;LEN(A4)-FIND(" ";A4))
=ZPRAVA(A4;DÉLKA(A4)-NAJÍT(" ";A4))

alebo
=REPLACE(A4;1;FIND(" ";A4);"")
=NAHRADIT(A4;1;NAJÍT(" ";A4);"")

Som teraz len na mobile, keď prídem, môžem Vám to poslať celé, každopádne:
-Modul odstránte iba jeden.
-V zostávajúcom Module nahraďte kód, ktorý tam je, kódom ktorý som poslal.
-Na názve Modulu nezáleží
-Názvy makier a priradenie k tlačítkam je tak ako ste mal.
-Dala by sa urobiť jedna spoločná procedúra na mazanie, ale aj tak by muselo mať každé tlačitko svoju na volanie tej spoločnej. Ušetrilo by sa pár riadkov možno, ale Vy ako laik by ste bol asi zmätenejší.

EDIT: Prikladám prílohu...

Nemôžete ukladať priamo pod disk C: (to platí hlavne pri Win10)
Vytvorte tam zložku napr. PDF a zmente v kóde
Filename:= "c:\excel-tisk-uvod.pdf"
na
Filename:= "c:\PDF\excel-tisk-uvod.pdf"
Skúste, či je to tým.

EDIT:
Inak tie Vaše makrá, aj logiku pomenovania súborov by som určo zmenil napr. minimálne takto :
-Module2 úplne odstráňte
-V Module1 všetko vymažte a dajte tam:
Sub vymaz_prijmy() ' vymaz_prijmy Makro
Range("C4:D5").ClearContents
Range("C4").Select
End Sub
Sub vymaz_vydaje() ' vymaz_vydaje Makro
Range("C11:C16,I11:I16,K11:K15,C23:K28,C33:K44,C50:E57,J50:K53").ClearContents
Range("C11").Select
End Sub
Sub vymaz_bydleni() ' vymaz_bydleni Makro
Range("C11:C16").ClearContents
Range("C11").Select
End Sub
Sub vymaz_uvery() ' vymaz_uvery Makro
Range("I11:I16,K11:K15").ClearContents
Range("I11").Select
End Sub
Sub vymaz_auto() ' vymaz_auto Makro
Range("C23:K28").ClearContents
Range("C23").Select
End Sub
Sub vymaz_provozni() ' vymaz_provozni Makro
Range("C33:K44").ClearContents
Range("C33").Select
End Sub
Sub vymaz_fixni() ' vymaz_fixni Makro
Range("C50:E57").ClearContents
Range("C50").Select
End Sub
Sub vymaz_OSVC() ' vymaz_OSVC Makro
Range("J50:K53").ClearContents
Range("J50").Select
End Sub
Sub tisk_uvod() ' tisk_uvod Makro
Dim Nazev As String, Slozka As String
Slozka = "C:\PDF\"
With ActiveSheet
Nazev = Slozka & IIf(.Name = "Úvod", .Range("L5").Value2 & " - roční přehled.pdf", .Range("H3").Value2 & " - rozvaha nákladů " & UCase(Format(DateSerial(2018, Val(.Name), 1), "mmmm")) & ".pdf")
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Nazev, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
End With
End Sub


Všetky tie ".Select", čo tam ostali sa dajú nahradiť za ".Activate", alebo za "Application.Goto prvá_bunka", všetko podľa toho, či je/nieje pred stlačením niečo označené, ak áno či sa má zachovať výber, či sa má skočiť na prvú bunku mazanej oblasti + či sa má naskrolovať, alebo sa nemá nič robiť okrem zmazania, a pod.

Predpokladá sa že máte adresár C:\PDF vytvorený, a názvy súborov sa robia podľa aktívneho listu a mena zákazníka v ňom. Teda sa predpokladá, že mená listov sú presne tak, ako sú v príklade.


Strana:  1 ... « předchozí  148 149 150 151 152 153 154 155 156   další » ... 286

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