zpět

Hlavní stránka

Poslední aktualizace: 25.06.2004

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