Jak používat (velmi rychlá) VBA makra v MS Office

Znám hodně lidí, typicky různí účetní, ekonomové atp., kteří používají makra v aplikacích MS Office, aniž jim rozumí. Prostě jim někdo ukázal funkci Zaznamenat makro a Spustit makro a oni ji používají. A to je skvělé.

Vážně. Dal bych nevím co, aby takovýhle makro rekordér obsahovala každá aplikace a považuji za zásadní nedostatek Google Apps, že ač obsahují mají svou obdobu maker – Apps Script, makro rekordér neobsahují.

Úvod pro laiky

Následuje úvod pro laiky, zkušení přeskočte až na tučný nadpis níže:

Poznámka: panel Developer/Vývojář, ve kterém se s Makry pracuje, musíte v novějších verzích Office extra zapnout – v aplikaci stistknete tlačítko Office (takové to kulaté vlevo nahoře), nebo Soubor (v nejnovějších Office), a tam „někde“ to bude – např. v anglickém Excel 2007 je to v Excel options (tlačítko dole) a zvolit Show Developer tab in the Ribbon, v českém Excel 2016 je to v Přizpůsobit pás karet a vpravo zaškrtnout Vývojář.

Pokračovat ve čtení „Jak používat (velmi rychlá) VBA makra v MS Office“

Excel+VBA – vložit jako text

Asi to znáte – kopírujete odněkud text do Excelu a on se tam vloží i s formátováním. Jasně, můžete jít na Home / Paste / Paste special / Insert as Unicode, nebo Home / Paste / Paste values (podle toho, jestli vkládáte text z nějakého dokumentu, či jestli vkládáte hodnoty z nějaké excelové tabulky) – ale to je samozřejmě otravné a zdržující.

Takže pro tyto účely jsem si vytvořil toto makro, kterému jsem přiřadil myslím dobře zapamatovatelnou zkratku CTRL+SHIFT+V.

Makro nejdřív zkusí obsah schránky vložit jako Excelové hodnoty, když se nezadaří, tak to zkusí jako Unicode text, a když ani to nejde, tak prostě jen pípne.

Sub Vlozit_jako_text()
'
' Vlozit_jako_text Makro
'
' Klávesová zkratka: Ctrl+Shift+V
'
On Error GoTo unicode
 Selection.PasteSpecial Paste:=xlPasteValues
 Exit Sub
unicode:
 On Error GoTo finish
 'ActiveSheet.PasteSpecial Format:="Text v kódu Unicode"
 ActiveSheet.PasteSpecial Format:="Unicode Text"
 Exit Sub
finish:
 Beep
 
End Sub

Excel+VBA – reset filtru tabulky při jejím zavření

Jestli pracujete ve firmě ve více lidech na jedné tabulce a používáte filtry, tak se vám už určitě stalo, že jste otevřeli tabulku a byly tam vyfiltrované nějaké položky podle potřeb někoho jiného a vy jste to museli nejdřív zrušit.

Já to vyřešil tak, že se u příslušné tabulky při ukládání (případně by šlo při otvírání filtr prostě zrezetuje. Následující makro je třeba přiřadit objektu ThisWorkbook („Pricelist“ je název listu, kde chci při ukládání rezetovat filtr, šlo by samozřejmě smyčkou projít všechny):

Private Sub Workbook_BeforeClose(Cancel As Boolean)

On Error Resume Next
 ActiveWorkbook.Sheets("Pricelist").ShowAllData

End Sub

Excel+VBA – seřazení listů podle abecedy

Následující makro myslím nepotřebuje dalšího komentáře, vše je řečeno titulkem

Public Function SortWorksheetsByName()

 Dim lCount As Long, lCounted As Long, lCount2 As Long
 Dim lShtLast As Long


 lShtLast = Sheets.Count

 For lCount = 1 To lShtLast
 For lCount2 = lCount To lShtLast
 If UCase(Sheets(lCount2).Name) < UCase(Sheets(lCount).Name) Then
 Sheets(lCount2).Move Before:=Sheets(lCount)
 End If
 Next lCount2
 Next lCount

End Function

Excel+VBA – rychlé přepínání psaní desetiných čárek

Jak pracuji s různými zdroji dat, mám někdy na vstupu data s desetinou čárkou, jindy s tečkou a při jejich kopírování z/do Excelu tak může dojít ke zničení těchto dat.

Např. předpokládejme, že máte standardně nastavený Excel a Windows s českým nastavením regionu, tj. oddělovač tisíců je mezera a desetinný oddělovač je čárka.

A teď si představte, že do takového Excelu vložíte data z nějakého amerického webu či dokumentu, kde jsou použity desetinné tečky.

Takže si představte, že vložíte hodnotu 1.9. Na první pohled si ničeho nevšimnete, vypadá to jako normální číslo, automaticky se to zarovná doprava. Jenže pak to číslo vynásobíte 2 a Excel vám napíše 4.5!

Problém je, že jste nevložili 1,9, ale 1. září (aktuálního roku), což je v interním počítání Excelu číslo 42248 (tolik dnů uplynulo od 1.1.1900). Takže vynásobením 2 jste do 84496 dnů, což je 4. května 2131, tedy zobrazeno jako krátké datum je to 4.5.

Proto používám jeden fígl – mám vytvořené malé makro s přiřazenou klávesovou zkratkou a s ní tak rychle přepínám mezi výchozím (českým) regionálním nastavením a mezi americkým.

Sub Prepnout()

 With Application
 .DecimalSeparator = "."
 .ThousandsSeparator = ","
 End With
 Application.UseSystemSeparators = Not Application.UseSystemSeparators
 
End Sub