Lista podfolderów w katalogu

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. 


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

 

Właściwości folderu

GetFolder to jedna z częściej wykorzystywanych metod obiektu FileSystem.Object.

Ma jeden parametr wejściowy:

    • folderspec– ścieżka do konkretnego obiektu.
      Argument obowiązkowy.

Za pomocą tej metody można odczytać następujące właściwości folderu:

    • Name – nazwa folderu.
    • Path – ścieżka do folderu.
    • Size– rozmiar wszystkich plików folderze.
    • DateCreated– data utworzenia.
    • DateLastModified– data ostatniej modyfikacji.
    • DateLastAccess– data ostatniego otwarcia.
    • ParentFolder– folder nadrzędny.
    • Files– kolekcja plików w folderze.
    • SubFolders– kolekcja podfolderów.

Zdarzenie OnKey

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”

’ Ctrl + Shift + D – komunikat
Application.OnKey „^+D”, „PokazKomunikat”

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. 


kawa dla marzateli

A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Zdarzenie OnTime

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

 


Kurs Excel programowanie w VBA

 

Aktywowanie arkusza

Aktywowanie arkusza to jedna z metod obiektu VBA Worksheet
Może występować również w modułach ogólnych VBA. 

kliknij, aby powiększyć

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

Jest to jednak z częściej używanych metod obiektu VBA Worksheet


A tu możesz mi postawić kawę: