Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno EXCEL 2007 - jak pomocí VBA vytisknout aktivní řádek na jehličkovou tiskárnu a ..

Pomozte někdo, kdo se vyznáte v excelu, jak vytisknout aktivní řádek po změně ve sloupci 3.

Podle tohoto odkazu http://gymzv.sk/~vyuka/informatika/excel/excelentn e/chipex05/09/excel_vba_udalosti.html (díky MachR55)
se dá zajistit, aby událost vložení něčeho do třetího sloupce spustila něco.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Oblast As Range

'definice sledované oblasti
Set Oblast = Range("C1:C1000")

'test výběru
If Union(Oblast, Target).Address = Oblast.Address Then
MsgBox "Změněna hodnota v buňce " & Target.Address(0, 0)
End If

End Sub

Jaký kód vložený mezi if a endif zajistí, aby se vytiskly první tři buňky (sloupce) aktuálního řádku?
A jakmile se něco změní v dalším řádku ve sloupci tři, ať se vytisknou zase první tři buňky (sloupce) v tomto dalším řádku pod.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oblast As Range 'definice sledované oblasti…
robert13 20.07.2015 10:48
robert13
Ne, teď to odstránkuje. Právě bych potřeboval, aby se vytiskl jen řádek, neodstránkovalo, a při změn…
lk1 20.07.2015 11:06
lk1
Tisknout bez odstránkování bude asi problém - nikde v nastaveních metody PrintOut potlačení odstránk…
MachR55 20.07.2015 11:40
MachR55
Nešlo by třeba tisknout přes nějaký formulář, který by byl dlouhý třeba jen jeden nebo dva řádky? Pa…
lk1 20.07.2015 14:06
lk1
Vše souvisí s tím, že dnes jsou všechny programy, ovladače i samotný systém stavěny na stránkový tis…
MachR55 21.07.2015 06:46
MachR55
Ja som jeho predoslu odpoved pochopil tak, ze pokial ta zmena bude vytlacena vo forme nejakeho formu…
robert13 21.07.2015 07:23
robert13
Asi máš pravdu, asi jsi to pochopil lépe...
MachR55 21.07.2015 07:27
MachR55
To znelo trochu ironicky, ja som to pisal s cielom bavit sa i s Tebou o moznostiach a ako to vidis T…
robert13 21.07.2015 07:52
robert13
Ne, promiň, to jsi opravdu pochopil špatně, rozhodně jsem to nemyslel ironicky. Mě prostě nedocvaklo…
MachR55 21.07.2015 08:01
MachR55
:beer: nový
robert13 21.07.2015 08:05
robert13
Tak asi vyřešeno, excel jsem pustil k vodě, natáhnu si to do něj z texťáku pozdějc. Vyhrabal jsem st… poslední
lk1 21.07.2015 14:56
lk1
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Oblast As Range

 'definice sledované oblasti
 Set Oblast = Range("C1:C1000")

 'test výběru
 If Union(Oblast, Target).Address = Oblast.Address Then
    MsgBox "Změněna hodnota v buňce " & Target.Address(0, 0)
    ActiveSheet.Range("A" & Target.Row & ":C" & Target.Row).PrintOut Copies:=1
 End If

End Sub

takto si to myslel?
Avšak pozor, zmena je aj zmazanie, t.j. ak zmažeš napr. bunku C5, vytlačia sa bunky A5 až C5, pričom C5 je prázdna...

Ne, teď to odstránkuje.
Právě bych potřeboval, aby se vytiskl jen řádek, neodstránkovalo, a při změně ve třetím sloupci na dalším řádku aby se zase vytiskly tři čísla vedle sebe na další řádek pod to.
A pořád dál.
Bez odstránkování.

Tisknout bez odstránkování bude asi problém - nikde v nastaveních metody PrintOut potlačení odstránkování nevidím. Zkoušel jsem i zagooglit, ale taky marně...
Osobně bych to řešil asi vytvářením pomocného TXT souboru s počítáním kolik řádků už tam je uloženo a při dosažení celé stránky bych ten soubor vytiskl. Samozřejmě by tam muselo být i nějaké tlačítko na vytištění, pokud by se skončila práce před dosažením konce stránky, nebo by se ten zbytek vytiskl automaticky před zavřením souboru.

Jen drobnou poznámku - tuhle část kódu:

Dim Oblast As Range

'definice sledované oblasti
Set Oblast = Range("C1:C1000")

bych někam odšoupl (třeba do procedury vykonávané při otevření sešitu - Workbook_Open) a proměnnou Oblast bych nastavil jako globální. Takhle se tato část kódu stále opakuje při každém vyvolání makra.

Vše souvisí s tím, že dnes jsou všechny programy, ovladače i samotný systém stavěny na stránkový tisk, nikoli řádkový. Žádný formulář Ti nepomůže, maximálně docílíš toho, že po vytištění jednoho řádku tiskárna odstránkuje. Pokud chceš průběžný tisk po každé změně, musíš rozchodit přímý tisk na tiskárnu (resp. port), tedy v podstatě obejít ovladače (+ systém), bez toho se dál nehneš.
Jediná alternativa - změny sbírat někde v programu (třeba v tom Excelovským makru) a až jich bude akorát na 1 stránku, tak je vytisknout. V tomhle případě bys přímý tisk nepotřeboval.

Ja som jeho predoslu odpoved pochopil tak, ze pokial ta zmena bude vytlacena vo forme nejakeho formulara (v zmysle tlaciva), tak mu to strankovanie nevadi. T.j. vytlaci sa papier so zaznamom trebars jedineho riadka, kde doslo ku zmene, ale bude to mat nejaku formu, t.j. zahlavie a pod. To by slo bez problemov.
Dokonca by mohli byt riadky, v ktorych doslo ku zmenam, docasne oznacovane nejakym indikatorom a k dispozicii by mal tlacitko, ktorym by dal kedykolvek prikaz k vytlaceniu nejakej davky, pricom by sa vytlacila davka indikatormi oznacenych riadkov a indikatory by sa povelom na vytlacenie nasledne zmazali... Alebo by sa dalo nastavit, ze sa vytlaci harok po kazdych 10 zmenach a pod a pod...

Ne, promiň, to jsi opravdu pochopil špatně, rozhodně jsem to nemyslel ironicky.
Mě prostě nedocvaklo, že by chtěl jeden řádek s hlavičkou na jedné stránce a měl by vyřešeno. Asi po ránu jedu stále v takovém poloautomatickém režimu... ;-):beer:

Tak asi vyřešeno, excel jsem pustil k vodě, natáhnu si to do něj z texťáku pozdějc.
Vyhrabal jsem staší počítač WXP s paralelním portem, nastavil tisk přímo na tiskárnu, spouštím při startu z bat souboru řádek:

type con: |wtee.exe -a vaha.txt lpt1

Chová se to solidně, samo si to případně vytvoří soubor vaha.txt, nebo když už existuje, tak to do něj připisuje další řádky, a v případě ukončení a znovustuštění počítače připisuje pořád dál do téhož souboru.
Když soubor vaha.txt přejmenuju (samozřejmě to jde provést až po ukončení cmd okna s type con: ...), tak si wintee vytvoří nový.
Přesně jak potřebuju.

Děkuju všem za pomoc i z minulého vlákna, kde byl zmíněn super prográmek wintee.

Zpět do poradny Odpovědět na původní otázku Nahoru