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

 

Okno dialogowe wskazujące folder

Do wyświetlenia okna dialogowego i wybrania w nim folderu służy  obiekt Application.Filedialog z parametrem wejściowym msoFileDialogFolderPicker

kliknij, aby pwoiększyć

Właściwości i parametry są tu takie same jak w przypadku okna dialogowego do wyboru pliku, ale niektóre z nich nie mogą być zastosowane, a nawet mogą wywołać błąd:

      • AllowMultiSelect
        właściwość ignorowana, w oknie dialogowym można wybrać tylko jeden folder
      • ButtonName 
        tekst na przycisku w oknie dialogowym (wartość typu String). Niestety, działa tylko dla systemu macOS, w Windowsie nie.
      • Filters
        nie można dodawać filtrów. Okno dialogowe wyboru folderu nie ma takiej opcji. Przy użyciu pojawia się
        błąd wykonania 438.
      • InitialFileName
        wartość typu String ograniczająca wybór plików widocznych w oknie dialogowym, stosowana najczęściej z użyciem symboli wieloznacznych
      • InitialView
        widok plików w oknie dialogowym (szczegóły,podgląd itd.)

         

        kliknij, aby powiększyć

        – ta właściwość czasami zawodzi. Jeżeli dany folder ma na komputerze wcześniej zmienione i zapisane w Eksploatorze plików preferowany sposób wyświetlania – wpisana tu opcja zostanie zignorowana. 
      • SelectedItems
        folder zaznaczony w oknie dialogowym
      • Show
        wyświetlenie okna dialogowego na ekranie. Po wybraniu folderu – metoda ta zwróci wartość True. Po naciśnięciu Anuluj – wartość False.
      • Title
        Tekst wyświetlany u góry okna dialogowego

Przykład procedury:

Public Sub WybierzFolder()
Dim FD As FileDialog
Dim NazwaFolder As String
Set FD = Application.FileDialog(msoFileDialogFolderPicker)
With FD
     .InitialFileName = „C:\*)”
     .InitialView = msoFileDialogViewDetails
     .Title = „Wskaż FOLDER”
  If .Show Then
     NazwaFolder = .SelectedItems(1)
   Else
     NazwaFolder= „Nie wskazano folderu”
End If
End With
Set FD = Nothing
MsgBox NazwaFolder
End Sub

A tak wygląda wygenerowane nim okno dialogowe:

Ja w swoich projektach najczęściej stosuję podobne procedury w formie funkcji. W ten sposób otrzymuję nazwę folderu, która mogą być użyta w innych procedurach.


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Błąd wykonania 438

kliknij, aby powiększyć

Error 438 – Object doesn’t support this property or method

Błąd wykonania 438 – Obiekt nie obsługuje tej właściwości lub metody

Błąd pojawia się w przypadkach błędnego zastosowania parametru.
U mnie wystąpił w takiej procedurze:

Public Sub WybierzFolderB()
Dim FD As FileDialog
Set FD = Application.FileDialog(msoFileDialogFolderPicker)
With FD
.Filters.Add „Obrazy jpg”, „*.jpg”
(…)

Kompilacja kodu prawidłowa – Application.FileDialog ma taką właściwość, ale użycie jej parametrem wejściowym msoFileDialogFolderPicker (do zaznaczenia folderu) powoduje konflikt przy dodawaniu filtrów. Takie okno nie pozwala na filtrowanie. 

Inne błędy wykonania VBA (Run-time) są tu:
Błędy kodu wykonania

 

Okno dialogowe wskazujące plik

Do wyświetlenia okna dialogowego i wybrania w nim pliku/plików służy  obiekt Application.Filedialog z parametrem wejściowym msoFileDialogFilePicker

kliknij, aby powiększyć

Najczęściej stosowane właściwości i parametry:

      • AllowMultiSelect
        True dla możliwości wyboru większej ilości plików
        False dla wyboru tylko jednego pliku
      • ButtonName 
        tekst na przycisku w oknie dialogowym (wartość typu String). Niestety, działa tylko dla systemu macOS, w Windowsie nie.
      • Filters
        filtr decydujący o tym, jaki typ plików ma być wyświetlany w oknie dialogowym 
        kliknij, aby powiększyć
      • InitialFileName
        wartość typu String ograniczająca wybór plików widocznych w oknie dialogowym, stosowana najczęściej z użyciem symboli wieloznacznych
      • InitialView
        widok plików w oknie dialogowym (szczegóły,podgląd itd.)

         

        kliknij, aby powiększyć

        – ta właściwość czasami zawodzi. Jeżeli dany folder ma na komputerze wcześniej zmienione i zapisane w Eksploatorze plików preferowany sposób wyświetlania – wpisana tu opcja zostanie zignorowana. 
      • SelectedItems
        pliki zaznaczone w oknie dialogowym
      • Show
        wyświetlenie okna dialogowego na ekranie. Po wybraniu choć jednego pliku – metoda ta zwróci wartość True. Po naciśnięciu Anuluj – wartość False.
      • Title
        Tekst wyświetlany u góry okna dialogowego

Na przykład takie procedury:

Public Sub WybierzPlik()
Dim FD As FileDialog
Dim NazwaPlik As String
Set FD = Application.FileDialog(msoFileDialogFilePicker)
With FD
   .AllowMultiSelect = False
   .Filters.Clear
   .Filters.Add „Obrazy jpg”, „*.jpg”
   .Filters.Add „Obrazy gif”, „*.gif”
   .Filters.Add „Wszystkie pliki”, „*.*”
   .InitialView = msoFileDialogViewPreview
   .Title = „Wskaż plik”
   If .Show Then
       NazwaPlik = .SelectedItems(1)
    Else
      NazwaPlik = „Brak pliku”
   End If
End With
Set FD = Nothing
MsgBox NazwaPlik
End Sub

A tak wygląda wygenerowane nim okno dialogowe:

Ja w swoich projektach najczęściej stosuję podobne procedury w formie funkcji. W ten sposób otrzymuję nazwę pliku/plików, które mogą być użyte w innych procedurach np. przy otwarciu pliku, wstawienia obraz itp.


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela