Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как работать с классами - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Как работать с классами
t330 Дата: Воскресенье, 07.04.2019, 19:05 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Всем добрый день!

Во вложении макрос с помощью которого записывается лог событий рабочей книги (когда и кто открыл).

Модуль класса:
[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]

Честно говоря, голова кругом... Никак не пойму концепцию классов и с чем их едят...
Если кто-то может пояснить простым языком или знает нормальное описание "для тупых", то дайте пожалуйста ссылку.
В яндексе я перечитал много описаний работы с классами, но в голове пока только каша ((...
К сообщению приложен файл: log_workbook_op.xlsm (22.5 Kb)
 
Ответить
СообщениеВсем добрый день!

Во вложении макрос с помощью которого записывается лог событий рабочей книги (когда и кто открыл).

Модуль класса:
[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
Дата добавления - 07.04.2019 в 19:05
krosav4ig Дата: Воскресенье, 07.04.2019, 21:43 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
знает нормальное описание

инглиш устроит?
Introduction To Classes
VBA Class Modules – The Ultimate Guide


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщение
знает нормальное описание

инглиш устроит?
Introduction To Classes
VBA Class Modules – The Ultimate Guide

Автор - krosav4ig
Дата добавления - 07.04.2019 в 21:43
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!