Příspěvky uživatele


< návrat zpět

Strana:  1 2 3 4 5 6 7 8 9   další » ... 164

Samotné nastavenie tlače nebude problém. Ale ak by ste chcel aby to rovno komunikovalo s externým programom a vkladalo mu hneď aj názov súboru, tak to už bude problém. Daný program musí mať dostupné nejaké API rozhranie, a navyše zdarma. Do tohto dobrodružstva sa púšťať nebudem.

Ak ide iba o samotné odoslanie, môže to byť jednoduchšie (stačí iba názov tlačiarne), alebo zložitejšie (je potrebný interný názov tlačiarne, teda aj s číslom).

Skúste najskôr či Vám funguje jednoduché makro Pokus. Ak nie, tak treba presedlať na ten zvyšok, kde sa riešia aj interné názvy s predložkou a číslami.

Sub Pokus()
Dim AktTlaciaren As String, NovaTlaciaren As String
AktTlaciaren = Application.ActivePrinter
NovaTlaciaren = "Bullzip PDF Printer"
ActiveSheet.PrintOut Preview:=True, ActivePrinter:=NovaTlaciaren
Application.ActivePrinter = AktTlaciaren
End Sub


Kód s popisom na ten obsiahlejší variant je v prílohe.

Čo je na ňom zlé? No, ... celý koncept je zlý.
Napr.:

- viete čo urobí tento riadok ?
If Len(Text) = 0 Then Exit ForNič! A to je práve ono. Každý prechod každým cyklom príde najskôr na tento riadok, kde otestuje či je Text nulovej dĺžky. A on skutočne je, lebo ho nikde predtým nenastavíte. Až za tým. Ale tam sa nikdy nedostane.

- For List = 3 To a
...
Worksheets(List)
Prečo sa začína od listu číslo 3

- Select - toto sa naučte používať iba keď je to nutné - veeeľmi zriedka. Odkazujte sa rovno na list, lebo každý má nejaké meno. Prípadne na jeho odkaz v kolekcii Worksheets.

-Alebo
d = Rows.Count
...
Cells(d + 1, b) = Text
Do "d" uložíte počet riadkov daného Excelu, v tomto prípade staršieho XLS je to 65536. To je maximum, viac mať XLS nemôže. A potom k tomu pripočítate +1, teda vznikne 65537. Bác chyba, taký riadok v XLS neexistuje (XLSX je to až 1048576).

- Nejdem to pitvať, len ako posledný príklad uvediem
Text = Cells(e, 1)Áno načítate si do premennej Text (ktorá mimochodom nieje deklarovaná, síce je typu Variant, ale aj tak pre prehľadnosť musí byť v deklarácii, premenná List takisto), ale vždy iba z 1. stĺpca. Darmo prechádzate cyklom ostatné stĺpce, keď vždy načítate 1.

Plus samozrejme nejaké logické veci, ako napr. ten spomínaný test If Len(Text) = 0. Ak by ste ho aj zaradili na správne miesto, čo ak bude niektorá bunka v tabuľke prázdna? Bác, cyklus sa ukončí a ostatné neskopíruje.
WS.Name = "tabulka" - čo ak ten list už existuje ? No nastane chyba.
Nepočíta sa tam so žiadnou chybou. Preto ja v mojom kóde testujem existenciu spoločného listu, vynechávam ho zo súhrnu, a testujem počet riadkov (či obsahuje list vôbec dáta).
-Prechádzanie všetkých Cells po jednej, je strašne pomalé. Preto som použil bleskové polia.

Ale neľakajte sa problémov, a upozornení na chyby (to nie sú výtky v pravom slova zmysle). Veď začínate, je to v pohode. Treba sa ozvať, keď niečo nepôjde.

Prípadne, ak by hrozilo, že výsledná tabuľka bude mať viac ako 32767 riadkov, tak sa nedá použiť transpozícia poľa, lebo je obmedzená na tento počet riadkov, ale použite túto úpravu.

PS: Transpozícia je potrebná pri poliach, ktorých veľkosť meníte za behu. A to preto, že meniť veľkosť môžete iba poslednému rozmeru poľa, čo je inak povedané na šírku. A keďže nám sa tabuľka zväčšuje na výšku, preto je potrebná pri takomto použití transpozícia poľa. Každopádne toto druhé riešenie, najskôr zistí celkový počet dát, a pole nastaví rovno na výšku, teda transpozícia nieje potrebná.

Stále si ale myslím, že na toto je lepší PowerQuery, ktorý ale ja príliš neovládam (tie čachre s počtom stĺpcov). Tak snáď niekto iný...

Makro čo som Vám dal v predošlej téme sedí presne na Váš súbor, len si ho skopírujte.

No ak pominieme nejaké nelogickosti, ktoré treba dotiahnuť, tak napr. takto.

-Čo ak spoločný list už existuje ? Zmazať v ňom dáta, a nahradiť novými ? Alebo nové pridať pod staré ? Teda inak povedané, je potrebné list Spolu vynechávať zo zlučovania dát ?
-Kde ma byť to makro umiestnené ? Ako sa má spúšťať ? Veď keď máte meniaci sa počet listov, a neistú existenciu spoločného listu, tak makro by mohlo byť asi iba v doplnku či ako tlačítko v lište nástrojov Excelu. Pretože listy meníte, asi aj mažete, a nevieme zabezpečiť existenciu nejakého tlačítka v každom liste.
-Počet stĺpcov sa líši. Je teda možné, že určitý stĺpec bude na inej pozícii ? To by sa muselo ošetriť.

Tých vecí k zamysleniu je viac.

Ale na toto by sa viac hodilo PowerQuery.

Tak za :
1. Vo VBA sa používajú ENG vzorce, teda žiadne POZVYHLEDAT ale MATCH.
2. ENG oddeľovačom argumentov nieje ";" bodkočiarka/středník, ale "," čiarka.
3. Názov listu obalte do apostrofov "'"
4. Úvodzovka musí byť uvedená 2x, aby ju VBA interpretoval ako úvodzovku, inak je to totiž jeden z riadiacich znakov určujúci zač./kon. reťazca.

Výsledok
"=OFFSET('Program'!$A$3,MATCH(1,('Program'!$B$4:$B$30=$X$5)*('Program'!$C$4:$C$30=""Ano""),0),0,COUNTIFS('Program'!$B$4:$B$30,$X$5,'Program'!$C$4:$C$30,""Ano""))"

A čo určí, do ktorej zo štyroch farebných tabuliek sa údaj má vložiť ? Akým spôsobom ? Doradu podľa pozice a turnusu pod seba ? Priložte vyplnený príklad, nech je vidieť, čo a kam.

EDIT:
Aha, v súbore máte asi chybu, lebo všetky tabuľky majú rovnaké označenie 1A/1B/1C, ale má to byť asi 1A/1B/1C, 2A/2B/2C, ...
Teda maticový vzorec by to mal zvládnuť, vyskúšajte.

Pochopil ste to, ale nie celkom to platí tak ako ste napísal, že v kolekcii môže byť rovnaký iba jeden prvok. Toto platí iba ak použijem 2. parameter metódy Add - [Key]. Ak tam dám iba Add, tak v poho môžem pridať aj rovnaké. Ale to Key mi zabezpečí, že každé pridávanie položky s rovnakým Key neprebehne.

Tu je ešte jednoduchý príklad aj na vzorcové riešenie.

Sub JedinecneHodnoty()
Dim Col As New Collection, D(), H(), x As Long, y As Long

D = Range("F5:N12").Value
On Error Resume Next
For x = 1 To UBound(D, 2) Step 2
For y = 1 To UBound(D, 1)
If Not IsEmpty(D(y, x)) Then Col.Add D(y, x), CStr(D(y, x))
Next y
Next x
On Error GoTo 0

If Col.Count > 0 Then
ReDim H(1 To Col.Count, 1 To 1)
For x = 1 To Col.Count
H(x, 1) = Col(x)
Next x
Range("B19").Resize(Col.Count).Value = H
End If
End Sub

Nastavte si v "Režim návrhu" vo vlastnostiach oblasť na vyplnenie ListBoxu (ListFillRange) a bunku pre odloženie hodnoty (LinkedCell), aby si ju pamätal. A potom nieje problém a stačí už iba:
Private Sub CommandButton1_Click()
Select Case ComboBox1.ListIndex
Case 0: MsgBox "čeština"
Case 1: MsgBox "angličtina"
Case 2: MsgBox "němčina"
Case 3: MsgBox "francouzština"
End Select
End Sub

Ktorá z tých oblastí je Definovaný názov so súčtom buniek ???
SOUHRN_OBRAT - používate ClearContents, teda evidentne oblasť, nie súčet vzorcom.
OJ_NAZVY - v cykle while a Offset, teda opäť oblasť buniek.
VZZ_OBRAT - toto je ten Def. názov so vzorcom ??? Tak potom skúste
Range("SOUHRN_OBRAT").Offset(i, 1).Value = [VZZ_OBRAT]

Koľko riadkov, takto spracovávate ? Musí to byť totiž pomalé. Vložte prílohu, prerobíme na rýchle polia, ak to pôjde...

Priložte nejakú prílohu.

Dalo by sa aj:
=VLOOKUP(F17;$K$3:$R$12;MATCH(C17;$L$2:$R$2;0)+1;FALSE)
=SVYHLEDAT(F17;$K$3:$R$12;POZVYHLEDAT(C17;$L$2:$R$2;0)+1;NEPRAVDA)

https://www.extendoffice.com/sk/documents/excel/771-excel-fill-blank-cells-with-value-above.html

Žiaľ nemám žiadnu literatúru k doporučeniu :(
Ale ani som nehľadal.
Ja som si vo VBA vystačil s netom. Ale zase aké také "programátorské" myslenie som mal naučené ešte z čias Delphi na Pentium I/II, či dokonca z Basicu a Assembleru na PMD-85 :)
Dnes sú určite lepšie možnosti ako kedysi. Takmer na všetko nájdete odpoveď pri zadaní EN dotazu v Googli.
V CZ napr. táto stránka, je tu všetkého mraky. Alebo office.lasakovi.
Z EN napr. stránky rondebruin alebo stackoverflow ...


Strana:  1 2 3 4 5 6 7 8 9   další » ... 164

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura III

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

Aktivní diskuse

ovládání tisku z VBA

elninoslov • 20.5. 14:23

kopírování tabulek na nový list

elninoslov • 20.5. 9:50

kopírování tabulek na nový list

Annie5 • 20.5. 8:56

vnořené cykly for - přetečení?

elninoslov • 20.5. 8:48

kopírování tabulek na nový list

elninoslov • 20.5. 7:32

vnořené cykly for - přetečení?

elninoslov • 20.5. 7:29

kopírování tabulek na nový list

Annie5 • 19.5. 22:49