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
Metoda ta powoduje aktywację czyli przejście do konkretnego arkusza. Arkusz nie może być ukryty. Istotne jest też to, że po wywołaniu tej metody nastąpi automatyczne uruchomienie zdarzenia arkusza po aktywacji.
Po aktywowaniu arkusza – staje się on arkuszem aktywnym, w VBA można w stosunku do niego używać również nazwy ActiveSheet.