VBA - Makra a akce
Tady je inspirace proto, jak tvořit makra:
Makra jsou uložena v modulu, občas se vztahují k formuláři,
nebo listu,
tak mohou být uložena v jejich sektoru.
Clear ClearContens
Copy Cut
Sort Print - Když
Print - zákaz Print
- zápatí
Clear - vymaže obsah i formát buňky
(buněk)
Sub del_obsah_a_format()
Sheets("List1").Select 'vyber List1
Range("A2:B7").Clear 'vymaž formát i obsah buněk
End Sub
Clear ClearContens
Copy Cut
Sort Print - Když
Print - zákaz Print
- zápatí
ClearContents - vymaže obsah
buňky (buněk)
Sub del_obsah()
Sheets("List1").Select 'vyber List1
Range("A2:B7").ClearContents 'vymaž obsah buněk
End Sub
Clear ClearContens
Copy Cut Sort
Print - Když Print
- zákaz Print - zápatí
Copy - kopíruj oblast (buňku)
Sub Kopiruj()
Sheets("List1").Select
Range("D14").Select
Selection.Copy
Range("D22").Select
ActiveSheet.Paste
End Sub
Nebo:
Sub Kopiruj2()
Sheets("List1").Select
Range("D14").Copy
Range("D22").Select
ActiveSheet.Paste
End Sub
Clear ClearContens
Copy Cut Sort
Print - Když Print
- zákaz Print - zápatí
Cut - vyjmout buňku (buňky)
Sub Vyjmout()
Range("D14:D17").Select
Selection.Cut
'vyjmout
Range("F14").Select
ActiveSheet.Paste
End Sub
Clear ClearContens
Copy Cut
Sort Print - Když
Print - zákaz Print
- zápatí
Sort - seřaď hodnoty
Toto makro si zkuste zaznamenat sami, ať se Vám lépe chápe.
Prvky v akci Sort:
Key1: ... KeyX:
klíčová buňka, sloupec ve kterém proběhne řazení
Order1:
Příkaz1 ...
Order1: = xlAscending = seřaď vzestupně A - Z
Order1: = xlDescending = seřaď sestupně Z - A
Příklad:
Sub Serad_vzestupne()
Range("G3").Select
Selection.Sort Key1:=Range("G3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
Pokud Vám nebude řazení hodnot fungovat dobře, což se
stává zejména, když chcete řadit více
tabulek, které jsou vedle sebe na jednom listu, je třeba, aby mezi nimi
byl prázdný sloupec,
a je dobré vybrat příkazem Select celou oblast: Range("G3:G10").Select
Clear ClearContens
Copy Cut
Sort Print - Když
Print - zákaz Print
- zápatí
Print - tiskni list ...
Události tisk předchází událost, která je uložená
v sekci Tento sešit - Thisworkbook.
V této sekci můžete specifikovat například záhlaví nebo zápatí.
Stejně tak lze i zakázat tisk sešitu.
Makro, které je uložené v modulu zase může provést
tisk na základě podmínky.
Já mám sešit pro výrobní podklady s mnoha listy.
Specifikuje například kolik čeho a na jak dlouhé kusy nařezat. Abych
si usnadnil práci, mám specifikovanou buňku s názvem "Kusů_celkem"
( Range("A1") má název Kusů_celkem ).
Potom na základě podmínky v makru Tisk_listů se
rozhoduje zda bude probíhat tisk, nebo nebude:
Sub Tisk_listů()
Dim Kusu_celkem_List1, Kusu_celkem_List2 As Range
Dim Kusu1, Kusu2 As Integer
Kusu1 = Range("Kusu_celkem_List1")
Kusu2 = Range(" Kusu_celkem_List2")
Sheets("List1").Select
If Kusu1 = 0 Then
MsgBox "Není co tisknout, počet kusů = 0" 'Neproběhne tisk
Else
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 'Probíhá tisk
End If
Sheets("List2").Select
If Kusu2 = 0 Then
MsgBox "Není co tisknout, počet kusů = 0" 'Neproběhne tisk
Else
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 'Probíhá tisk
End If
' ... a tak dále
End Sub
Clear ClearContens
Copy Cut
Sort Print - Když
Print - zákaz Print - zápatí
Příklad na zakázání
Tisku v sešitu:
V sekci Tento sešit - Thisworkbook existuje
volba Workbook a událost BeforePrint.
V toto makro se automaticky spustí vždy před tiskem:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
End Sub
Vlastnost Cancel As Boolean - Cancel = True / False
může zakázat tisk, a to nastavením:
Cancel = True
Příklad:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel = True
If Cancel = True Then
MsgBox "Je zakázáno tisknout jakýkoliv list sešitu !!!"
End If
End Sub
Clear ClearContens
Copy Cut
Sort Print - Když
Print - zákaz Print - zápatí
Příklad na definici zápatí
pro každý list:
Abych věděl kdo, a z jaké složky tiskl zakázku, používám
toto nastavení zápatí.
ThisWorkbook.FullName vrací název sešitu včetně cesty, kde je uložen
Application.UserName vrací jméno uživatele, který je přihlášen
na PC
Private Sub Workbook_BeforePrint(cancel As Boolean)
cancel = False
If cancel = True Then
MsgBox "Je zakázáno tisknout jakýkoliv list sešitu !!!"
End If
Dim Label As String
Label = ThisWorkbook.FullName & " Zpracoval: " & Application.UserName
For Each sht In ThisWorkbook.Sheets 'pro každý
list v tomto sešitu
sht.PageSetup.LeftFooter = Label 'zápatí zarovnané
doleva = Label
Next sht
End Sub
|