Bogdan Gilarski

Bogdan Gilarski www.excelperfect.pl
Perfect And
Practical

Temat: Nowy artykuł na temat zdarzenia Change

Jak w temacie.
W imieniu swoim oraz Zbyszka Budziewicza, autora artykułu zapraszam do czytania: http://excelperfect.pl/vba/63-zdarzenie-change-w-excelu
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Nowy artykuł na temat zdarzenia Change

Świetna robota Zbyszek - bardzo obszerne opracowanie :-).

Temat: Nowy artykuł na temat zdarzenia Change

Witam,
praca niewątpliwie wartościowa lecz Zbyszek nie ustrzegł się nieścisłości.
Przykładowo na stronie 4 napisał "jedyna linijka kodu „wykonalnego”, która się w nim znajduje nigdy nie przyczyni się do powstania jakiegokolwiek błędu" i zapomniał o możliwości zabezpieczenia arkusza przez użytkownika.

Nie wiem, czy się zgodzicie, ale podany przykład modułu klasy jest bardzo sztuczny i 'wymuszony', użyty zamiast funkcji.
Ja sugerowałbym jako przykład klasę podobną do poniższej klasy clsZakres:

Private WithEvents cArkusz As Excel.Worksheet
Private cZakres As Excel.Range

Property Set ZakresKontrolowany(ByRef Zakres As Excel.Range)
Set cZakres = Zakres
Set cArkusz = Zakres.Parent
End Property

Private Sub cArkusz_Change(ByVal Target As Range)

On Error GoTo cArkusz_Change_Error

If cZakres Is Nothing Then Exit Sub

Application.EnableEvents = False

If Not Intersect(Target, cZakres) Is Nothing Then
Target.Offset(0, 1).Value = Format(Now)
End If

cArkusz_Change_Exit:
Application.EnableEvents = True
On Error GoTo 0
Exit Sub

cArkusz_Change_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & _
") in procedure cArkusz_Change of Class Module clsZakres"
Resume cArkusz_Change_Exit
End Sub

i przykładowe użycie jej w module arkusza:
Dim myZakres As clsZakres

Private Sub Worksheet_Activate()
Set myZakres = New clsZakres
Set myZakres.ZakresKontrolowany = Me.Columns("A")
End Sub

Temat: Nowy artykuł na temat zdarzenia Change

Ryszard G.:
Przykładowo na stronie 4 napisał "jedyna linijka kodu „wykonalnego”, która się w nim znajduje nigdy nie przyczyni się do powstania jakiegokolwiek błędu" i zapomniał o możliwości zabezpieczenia arkusza przez użytkownika.

Po pierwsze jeżeli użytkownik zablokuje arkusz, to NIGDY procedura Change się nie uruchomi, więc o jakim błędzie mówisz?
Zresztą tutaj nie chodziło o samo rozwodzenie się nad możliwościami powstania błędu, tylko o rozbudowaną konstrukcję obsługi błędu, która przy tylko tej jednej linijce kodu nie ma sensu....wystarczy samo pomijanie błędów.

Nie wiem, czy się zgodzicie, ale podany przykład modułu klasy jest bardzo sztuczny i 'wymuszony', użyty zamiast funkcji.
Ja sugerowałbym jako przykład klasę podobną do poniższej klasy clsZakres:

To co przedstawiłeś, nie jest wcale zawartością modułu klasy :)

Twój przykład to kod z pierwszej części artykułu, gdzie później opisałem nieszcęsne skutki jego działania ;)

Poczytaj dalej, troszkę uważniej :)

PozdrawiamZbigniew Budziewicz edytował(a) ten post dnia 13.09.11 o godzinie 13:42

konto usunięte

Temat: Nowy artykuł na temat zdarzenia Change

Ryszard G.:
Witam,
praca niewątpliwie wartościowa lecz Zbyszek nie ustrzegł się nieścisłości.
Przykładowo (...)

chłopie, że Ci sie chce..



Wyślij zaproszenie do