Во вложении макрос с помощью которого записывается лог событий рабочей книги (когда и кто открыл).
Модуль класса: [vba]
Код
Option Explicit
Public WithEvents AppEvents As Application
Private Sub AppEvents_WorkbookOpen _ (ByVal Wb As Excel.Workbook) Call UpdateLogFile(Wb) End Sub
[/vba]
Модуль основной:
[vba]
Код
Option Explicit
Dim AppObject As New clsApp
Sub Init() ' Вызов по событию Workbook_Open Set AppObject.AppEvents = Application End Sub
Sub UpdateLogFile(Wb) Dim txt As String Dim Fname As String On Error Resume Next txt = Wb.FullName txt = txt & "," & Date & "," & Time txt = txt & "," & Application.UserName Fname = Application.DefaultFilePath & "\logfile.csv" Open Fname For Append As #1 Write #1, txt Close #1 End Sub
Function DefaultFileDirectory() DefaultFileDirectory = Application.DefaultFilePath End Function
[/vba]
Модуль Книги:
[vba]
Код
Private Sub Workbook_Open() Call Init End Sub
[/vba]
Объясните пожалуйста кто может принцип работы с классами на этом примере.
Как я понимаю свой Класс создается, чтобы описать какой-то свой новый объект, со своими переменными, свойствами и методами, которых нет в Excele
В данном случае, в модуле Класса clsApp создается глобальная переменная AppEvents из объекта Application , которая привязана к событиям Экселя (для этого тут пишется "withevents")
Далее в модуле Класса создается процедура, срабатывающая при открытии книги Экселя под названием "AppEvents_WorkbookOpen"
На этом создание Класса закончено... Зачем только его создавали? Нельзя, чтоли в основном модуле записывать лог файл открытия книги без всяких классов?
Далее в основном Модуле начинается использование созданного нами Класса следующим образом:
Объявляется новая переменная AppObject как переменная, имеющая все свойства и методы из нашего созданного Класса clsApp
И далее самое непонятное: В процедуре Init() этой нашей переменной AppOject присваивается (или как это правильно написать ? ) объект Application [vba]
Код
Sub Init() ' Вызов по событию Workbook_Open Set AppObject.AppEvents = Application End Sub
[/vba]
Честно говоря, голова кругом... Никак не пойму концепцию классов и с чем их едят... Если кто-то может пояснить простым языком или знает нормальное описание "для тупых", то дайте пожалуйста ссылку. В яндексе я перечитал много описаний работы с классами, но в голове пока только каша ((...
Всем добрый день!
Во вложении макрос с помощью которого записывается лог событий рабочей книги (когда и кто открыл).
Модуль класса: [vba]
Код
Option Explicit
Public WithEvents AppEvents As Application
Private Sub AppEvents_WorkbookOpen _ (ByVal Wb As Excel.Workbook) Call UpdateLogFile(Wb) End Sub
[/vba]
Модуль основной:
[vba]
Код
Option Explicit
Dim AppObject As New clsApp
Sub Init() ' Вызов по событию Workbook_Open Set AppObject.AppEvents = Application End Sub
Sub UpdateLogFile(Wb) Dim txt As String Dim Fname As String On Error Resume Next txt = Wb.FullName txt = txt & "," & Date & "," & Time txt = txt & "," & Application.UserName Fname = Application.DefaultFilePath & "\logfile.csv" Open Fname For Append As #1 Write #1, txt Close #1 End Sub
Function DefaultFileDirectory() DefaultFileDirectory = Application.DefaultFilePath End Function
[/vba]
Модуль Книги:
[vba]
Код
Private Sub Workbook_Open() Call Init End Sub
[/vba]
Объясните пожалуйста кто может принцип работы с классами на этом примере.
Как я понимаю свой Класс создается, чтобы описать какой-то свой новый объект, со своими переменными, свойствами и методами, которых нет в Excele
В данном случае, в модуле Класса clsApp создается глобальная переменная AppEvents из объекта Application , которая привязана к событиям Экселя (для этого тут пишется "withevents")
Далее в модуле Класса создается процедура, срабатывающая при открытии книги Экселя под названием "AppEvents_WorkbookOpen"
На этом создание Класса закончено... Зачем только его создавали? Нельзя, чтоли в основном модуле записывать лог файл открытия книги без всяких классов?
Далее в основном Модуле начинается использование созданного нами Класса следующим образом:
Объявляется новая переменная AppObject как переменная, имеющая все свойства и методы из нашего созданного Класса clsApp
И далее самое непонятное: В процедуре Init() этой нашей переменной AppOject присваивается (или как это правильно написать ? ) объект Application [vba]
Код
Sub Init() ' Вызов по событию Workbook_Open Set AppObject.AppEvents = Application End Sub
[/vba]
Честно говоря, голова кругом... Никак не пойму концепцию классов и с чем их едят... Если кто-то может пояснить простым языком или знает нормальное описание "для тупых", то дайте пожалуйста ссылку. В яндексе я перечитал много описаний работы с классами, но в голове пока только каша ((...t330