W jaki sposób wylistować listę podfolderów w katalogu? Jednym z lepszych sposobów jest wykorzystanie metody FileSystemObject.GetFolder.
Załóżmy, że mamy taki taki układ folderów (przykład z mojego dysku):
kliknij, aby powiększyć
Katalog z listą podfolderów można wylistować w komórkach Excela do takiej postaci:
kliknij, aby powiększyć
Przykładowy kod może wyglądać tak:
Public Sub Foldery() Dim FSO As Object Dim Folder As Object Dim Podfolder As Object Dim JNazwa As String Dim NF As String Dim i As Long Dim k As Long Set FSO = CreateObject(„Scripting.FileSystemObject”) Set Folder = FSO.GetFolder(Range(„A2”).Value)
i = 2 For Each Podfolder In Folder.SubFolders
i = i + 1
JNazwa = Podfolder.Name
Cells(i, 2) = JNazwa
i = Podfoldery(Folder & „\” & JNazwa, 3, i) Next Podfolder End Sub
_________________________________ Public Function Podfoldery(JF As String, k As Long, w As Long) Dim FSOP As Object Dim FolderP As Object Dim PodfolderP As Object Dim JNazwaP As String Set FSOP = CreateObject(„Scripting.FileSystemObject”) Set FolderP = FSOP.GetFolder(JF) For Each PodfolderP In FolderP.SubFolders
w = w + 1
JNazwaP = PodfolderP.Name
Cells(w, 3) = JNazwaP Next PodfolderP
Podfoldery = w Set FolderP = Nothing Set FSOP = Nothing End Function
Oczywiście kod można rozbudować do wylistowania kolejnych poziomów.
Jeśli trzeba – mogę pomóc.
Application.OnKey to metoda obiektu Application tworząca własne skróty klawiaturowe:
kliknij, aby powiększyć
Argumenty metody to:
Key – sekwencja klawiszy, która ma uruchomić argument obowiązkowy
Procedure – nazwa procedury, która ma zostać uruchomiona argument opcjonalny
Argument Key występuje w sekwencji z klawiszami:
Shift: znak plus (+)
Ctrl: znak (^)
Alt: znak procentu (%).
Można tu używać zarówno liter jak i klawiszy funkcyjnych (w nawiasach klamrowych):
Klawisz
Kod
Backspace
{BACKSPACE} lub {BS}
Break
{BREAK}
Caps Lock
{CAPSLOCK}
Delete lub Del
{DELETE} lub {DEL}
End
(END}
Enter
˜ (tylda)
Enter (na klawiaturze numerycznej)
{ENTER}
Escape
{ESCAPE} lub {esc]
Home
{HOME}
Ins
{INSERT}
NumLock
{NUMLOCK}
Page Down (PgDn)
{PGDN}
Page Up (PgUp)
{PGUP}
Scroll Lock
{SCROLLLOCK}
Strzałka w dół
{DOWN}
Strzałka w górę
{UP}
Strzałka w lewo
{LEFT}
Strzałka w prawo
{RIGHT}
Tab
{TAB}
F1 do F15
{F1} do {F15}
Wyłączenie tak wprowadzonego skrótu klawiszowego jest możliwe z zastosowaniem również metody Application.OnKey, ale bez drugiego argumentu czyli Proceudre
W praktyce wygląda to tak:
’ ============================ ’ TEST Application.OnKey ’ ============================ ’ Ustawienie skrótów klawiszowych Public Sub SETUP_OnKey() ’ Ctrl + Shift + A – kolorowanie komórki
Application.OnKey „^+A”, „KolorujNaCzerwono”
’ Ctrl + Shift + B – wpisanie tekstu
Application.OnKey „^+B”, „WpiszTekst”
’ Ctrl + Shift + C – czyszczenie komórki
Application.OnKey „^+C”, „WyczyscKomorke”
MsgBox „Skróty zarejestrowane.” & vbCrLf & _
„A = kolor” & vbCrLf & _
„B = wpisz tekst” & vbCrLf & _
„C = wyczyść komórkę” & vbCrLf & _
„D = komunikat”, vbInformation End Sub ’ ============================ ’ AKCJE POD SKRÓTY ’ ============================ Public Sub KolorujNaCzerwono()
ActiveCell.Interior.Color = RGB(255, 0, 0) End Sub Public Sub WpiszTekst()
ActiveCell.Value = „Test OnKey” End Sub Public Sub WyczyscKomorke()
ActiveCell.Clear End Sub Public Sub PokazKomunikat()
MsgBox „Działa!”, vbInformation End Sub ’ ============================ ’ WYŁĄCZENIE SKRÓTÓW ’ ============================ Public Sub Off_OnKey()
Application.OnKey „^+A”
Application.OnKey „^+B”
Application.OnKey „^+C”
Application.OnKey „^+D”
MsgBox „Skróty wyłączone.”, vbInformation End Sub
Generalnie – przed zastosowaniem konkretnych przykładów – trzeba sprawdzić, czy na pewno zadziała. W niektórych przypadkach – niestety nie – tak jakby Excel miał wbudowaną blokadę własnych skrótów.
Application.OnTime to metoda obiektu Application wywoływana zdarzeniem związanym z określonym czasem systemowym.
Argumenty metody to:
EarliestTime – czas, kiedy procedura ma zostać uruchomiona argument obowiązkowy
Procedure – nazwa procedury, która ma zostać uruchomiona argument obowiązkowy
LatestTime- ostatni czas, kiedy procedura ma zostać uruchomona argument nieobowiązkowy
Schedule – powtarzalność. Argument decydujący, czy procedura ma być ponownie uruchomiona (wartość True) czy nie (wartość False).
Argument opcjonalny, wartość domyślna True.
Przykład procedury z wykorzystaniem metody OnTime – przez 20 minut, co minute jest wpisywany bieżący czas do kolejnych komórek kolumny K.
’Zmienne globalne: Public NastCzas As Date Public CzasKoniec As Date ’ Uruchomienie cyklicznego wpisywania Public Sub StartCzas()
CzasKoniec = Now + TimeValue(„00:20:00”)
WpiszCzas End Sub ’ Procedura wpisująca czas i planująca kolejne wywołanie Public Sub WpiszCzas() Dim i As Long
i = Range(„K” & Rows.Count).End(xlUp).Row + 1
Range(„K” & i).Value = Now() ’ zaplanuj kolejne wywołanie za minutę
NastCzas = Now + TimeValue(„00:01:00”)
Application.OnTime EarliestTime:=NastCzas, Procedure:=”WpiszCzas”, LatestTime:=CzasKoniec, Schedule:=True End Sub