Uložit jako PDF - Excel | VBA | Excelplus.NET

Transkript

Uložit jako PDF - Excel | VBA | Excelplus.NET
Výběr složek a souborů ve VBA
V článku Systémové proměnné a složky jsme si povídali o tom, jak se dobrat speciálních složek
operačního systému. Dnes se podíváme na to, jak složky a soubory vybírat prostřednictvím dialogů.
Excel nabízí jakýsi univerzální objekt FileDialog, který v sobě nese čtyři podtypy dialogů – pro výběr
složky (Folder Picker), výběr souborů (File Picker), a pro otevření (Open), resp. uložení souboru
(SaveAs).
Nejprve si ukážeme výběr složky.
Sub DialogVyberSlozky()
'víceúčelový dialog, zde pro výběr složky
With Application.FileDialog(msoFileDialogFolderPicker)
'titulek, běžně "Procházet"
.Title = "Výběr složky"
'výchozí styl zobrazení, zde velké ikony
'Windows 7, 64 bit, nefunkční
.InitialView = msoFileDialogViewLargeIcons
'vícenásobný výběr složek nelze použít
'.AllowMultiSelect = True
'výchozí zobrazená složka, zde Temp
.InitialFileName = Environ("Temp")
'popis tlačítka, běžně "OK"
.ButtonName = "Vybrat"
'zobrazení dialogu
.Show
'byla vybrána složka?
If .SelectedItems.Count > Then
'výpis do okna Immediate
Debug.Print .SelectedItems(1)
Excelplus.NET | 1
Výběr složek a souborů ve VBA
End If
End With
End Sub
Výběr složky
Na chvilku si odskočíme pro výběr složky do API a tak trochu se vrátíme k tématu systémových
složek, abychom si nastavili výchozí složku v dialogu.
Private Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
Excelplus.NET | 2
Výběr složek a souborů ve VBA
iImage As Long
End Type
Private Const CSIDL_PERSONAL As Long = &H5
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias _
"SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias _
"SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Sub TestSlozkaVyber()
Dim strSlozka As String
strSlozka = GetDirectory()
End Sub
Function GetDirectory(Optional Msg) As String
Dim bInfo As BROWSEINFO
Dim path As String
Dim r As Long, x As Long, pos As Integer
'výchozí složka
'http://www.garybeene.com/code/visual%20basic252.htm
'zde moje složka Dokumenty
bInfo.pidlRoot = CSIDL_PERSONAL
'popisek dialogu
If IsMissing(Msg) Then
bInfo.lpszTitle = "Výběr složky"
Else
bInfo.lpszTitle = Msg
End If
'typ složky
bInfo.ulFlags = &H1
Excelplus.NET | 3
Výběr složek a souborů ve VBA
'zobrazení dialogu
x = SHBrowseForFolder(bInfo)
'parsování
path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal path)
If r Then
pos = InStr(path, Chr$())
GetDirectory = Left(path, pos - 1)
Else
GetDirectory = ""
End If
End Function
Výběr složky přes API funkce
Ale teď už zpět k objektu FileDialog a možnosti výběru souborů.
Sub DialogVyberSouboru()
Dim i As Integer
'víceúčelový dialog, zde pro výběr souborů
With Application.FileDialog(msoFileDialogFilePicker)
Excelplus.NET | 4
Výběr složek a souborů ve VBA
'vícenásobný výběr souborů
.AllowMultiSelect = True
'výchozí zobrazená složka, zde Temp
.InitialFileName = Environ("Temp")
'zobrazení dialogu
.Show
'byl vybrán nějaký soubor?
If .SelectedItems.Count > Then
'pro každou vybranou položku
For i = 1 To .SelectedItems.Count
'výpis do okna Immediate
Debug.Print .SelectedItems(i)
Next i
End If
End With
End Sub
Určitě vás bude zajímat také možnost filtrování složky podle přípony souborů.
Sub DialogVyberSouboruFiltr()
Dim i As Integer
'víceúčelový dialog, zde pro výběr souborů
With Application.FileDialog(msoFileDialogFilePicker)
'vícenásobný výběr souborů
.AllowMultiSelect = True
'výchozí zobrazená složka, zde složka tohoto souboru
Excelplus.NET | 5
Výběr složek a souborů ve VBA
.InitialFileName = ThisWorkbook.path
'přidání dvou filtrů
.Filters.Add "Vybrané typy obrázků", _
"*.gif; *.jpg; *.jpeg; *.bmp; *.png", 1
.Filters.Add "Soubory aplikace Excel", "*.xl*", 2
'výchozí druhý filtr
.FilterIndex = 2
'zobrazení dialogu
.Show
'byl vybrán nějaký soubor?
If .SelectedItems.Count > Then
'alternativně If .Show = -1 then
'pro každou vybranou položku
For i = 1 To .SelectedItems.Count
'výpis do okna Immediate
Debug.Print .SelectedItems(i)
Next i
End If
End With
End Sub
Excelplus.NET | 6
Výběr složek a souborů ve VBA
Výběr souborů
Ještě se podíváme na třetí podtyp objektu FileDialog. Zatímco předchozí dialogy pouze vracely
seznam vybraných položek, tento je otevírá prostřednictvím metody Execute.
Sub DialogSouborOtevrit()
Dim i As Integer
'víceúčelový dialog
'zde pro výběr a otevření souborů
'a to pouze takových, které jsou přidružené
'hostitelské aplikaci, tj. Microsoft Excel!
With Application.FileDialog(msoFileDialogOpen)
'vícenásobný výběr souborů
.AllowMultiSelect = False
Excelplus.NET | 7
Výběr složek a souborů ve VBA
'výchozí zobrazená složka, zde Temp
.InitialFileName = ThisWorkbook.path
'zobrazení dialogu
.Show
'byl vybrán nějaký soubor?
If .SelectedItems.Count > Then
'spuštění (lépe řečeno otevření souboru)
.Execute
End If
End With
End Sub
Jak už napovídá komentář v kódu, není bohužel možné si kupříkladu nastavit filtr na obrázky a čekat,
že je metoda Execute spustí v přidruženém grafickém programu. Ostatně podívejte se na filtry
tohoto dialogu.
Excelplus.NET | 8
Výběr složek a souborů ve VBA
Výběr souborů k otevření
I zde je cítit ze strany Microsoftu schizofrenie, vždyť už dávno existuje jiný způsob…
Sub DialogSouborOtevritAlternativa()
Dim varFName As Variant
Dim i As Integer
'metoda GetOpenFilename
varFName = _
Application.GetOpenFilename( _
FileFilter:="Soubory aplikace Excel (*.xl*), *.xl*", _
MultiSelect:=True)
Excelplus.NET | 9
Výběr složek a souborů ve VBA
If IsArray(varFName) Then
For i = LBound(varFName) To UBound(varFName)
'otevření sešitů
Workbooks.Open (varFName(i))
Next
End If
End Sub
Různorodost a změny v dialozích typu Otevřít/Uložit jsou leckdy přínosné (tipy si ukážeme jindy), ale
nezřídka i pitomé a neergonomické (viz Excel 2013 a trotlovské proklikávání se k dialogu). Peklo s
nimi zažívám ve smyslu kompatibility starších programů, které jednoduše spadnou, i když by jinak
fungovali naprosto normálně. Obzvláště se to týká portable aplikací.
Excelplus.NET | 10

Podobné dokumenty

Bednářské listy

Bednářské listy další stanoviště? V terénu už nejde jen o luštění, ale taky o vytrvalost, nadšení, soudržnost týmu. Podle mě tak do vlastní hry neprojde spousta týmů, které by v ní měly dobré šance. Podle vás tedy...

Více

Uložit jako PDF - Excel | VBA | Excelplus.NET

Uložit jako PDF - Excel | VBA | Excelplus.NET na objekty ActiveWorkbook (ThisWorkbook) a jejich vlastnost .Path. Jestliže má cesta vazbu na instalaci Excelu (Office), podívejte se na vybrané vlastnosti objektu Application (.Path, .Startup.Path...

Více

Uložit jako PDF - Excel | VBA | Excelplus.NET

Uložit jako PDF - Excel | VBA | Excelplus.NET Namátkou – ISFORMULA vrací PRAVDA, pokud buňka obsahuje vzorec. Funguje vcelku v pohodě, ale proč není přeložena jako JE.VZOREC? Nebylo by to sice česky úplně správně, ale zařadila by se tak mezi o...

Více

BVI Letní FREEdom Slevy and Balíčky

BVI Letní FREEdom Slevy and Balíčky hosté s balíčkem BEYC Classic Package nyní dostanou zdarma lekci Stand-Up Paddleboard, výlet na kajaku s průvodcem a pěší túru rovněž s průvodcem. Nabízíme slevu 20% z našich cen na standard Beachf...

Více

Uložit jako PDF - Excel | VBA | Excelplus.NET

Uložit jako PDF - Excel | VBA | Excelplus.NET slovy. Set nechal před dvůr předvést Nemtyho a tomu byly za neposlušnost useknuty prsty na nohou. Dvůr uznal právo na trůn Horovi, nicméně mezitím Hor přistoupil na nabídku utkat se se Setem v sout...

Více

KDYŽ se řekne Excelu (2) Excelplus.NET | 1 V druhé části tématu

KDYŽ se řekne Excelu (2) Excelplus.NET | 1 V druhé části tématu Písmeno X označuje v pravdivostní tabulce požadovaný stav chodu klimatizace a ve finále i celou funkci. Hodnoty přeneseme do jiné podoby (Karnaughovy mapy, její plošné provedení jí předurčuje max. ...

Více