Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Вызов макроса по событию (при изменении ячейки), Не работает вызов макроса по событию
 
Всем привет. Имеется вот такой код:
Код
Option Explicit
Public sValue As String
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name = "LOG" Then Exit Sub
    Dim sLastValue As String
    Dim lLastRow As Long

    With Sheets("LOG")
        lLastRow = .Cells.SpecialCells(xlLastCell).Row + 1
        If lLastRow = Rows.Count Then Exit Sub
        Application.ScreenUpdating = False: Application.EnableEvents = False
        .Cells(lLastRow, 1) = CreateObject("wscript.network").UserName
        .Cells(lLastRow, 2) = Target.Address(0, 0)
        .Cells(lLastRow, 3) = Format(Now, "dd.mm.yyyy HH:MM:SS")
        .Cells(lLastRow, 4) = Sh.Name
        .Cells(lLastRow, 5).NumberFormat = "@"
        .Cells(lLastRow, 5) = sValue
        If Target.Count > 1 Then
            Dim rCell As Range, rRng As Range
            On Error Resume Next
            Set rRng = Intersect(Target, Sh.UsedRange): On Error GoTo 0
            If Not rRng Is Nothing Then
                For Each rCell In rRng
                    If Not IsError(Target) Then sLastValue = sLastValue & "," & rCell Else sLastValue = sLastValue & "," & "Err"
                Next rCell
                sLastValue = Mid(sLastValue, 2)
            Else
                sLastValue = ""
            End If
        Else
            If Not IsError(Target) Then sLastValue = Target.Value Else sLastValue = "Err"
        End If
        .Cells(lLastRow, 6).NumberFormat = "@"
        .Cells(lLastRow, 6) = sLastValue
    End With
    Application.ScreenUpdating = True: Application.EnableEvents = True
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name = "LOG" Then Exit Sub
    If Target.Count > 1 Then
        Dim rCell As Range, rRng As Range
        On Error Resume Next
        Set rRng = Intersect(Target, Sh.UsedRange): On Error GoTo 0
        If rRng Is Nothing Then Exit Sub
        For Each rCell In rRng
            If Not IsError(rCell) Then sValue = sValue & "," & rCell Else sValue = sValue & "," & "Err"
        Next rCell
        sValue = Mid(sValue, 2)
    Else
        If Not IsError(Target) Then sValue = Target.Value Else sValue = "Err"
    End If
End Sub

В двух словах, при изменении любой ячейки в книге на лист LOG производится запись действий. (Нашел данный код в интернете).
Так вот на виндовсе все работает как надо, на маке он даже не вызывается... Как решить эту проблему ?  
 
У МАС'а проблемы с событиями...
 
А на  Мас в редакторе в КомбоБоксе модуля листа вообще есть это событие? Не помню, кто (может Елена) говорил, что скопированный из Windows событийный код не работает, а если его написать, то всё нормально. Но могу и ошибаться.
 
Цитата
Юрий М написал: А на  Мас в редакторе в КомбоБоксе модуля листа вообще есть это событие?
не совсем понимаю о чем речь, у меня нет возможности на маке это всё делать и смотреть, я делаю на винде, этот код в модуле книги, и все норм рабтает. Потом это файл открывается в ексель на мак и ничего не работает. Можете подробнее где нужно посмотреть ? Если же а модуле книги, то я проверял там этот код есть. Я даже ставил прерыв что бы увидеть вызывается ли он вообще но ничего не происходит .
то есть нужно попробовать написать это все на самом маке?
Изменено: Lucifer - 28 Апр 2018 18:21:10
 
vikttur,как быть тогда в этой ситуации? Можно как то обойти?
 
Цитата
Lucifer написал:
нет возможности на маке это всё делать и смотреть
Показываю, что происходит на МАКе.
Вывод неутешительный. Этот макрос не будет работать в Mac Excel
 
Цитата
Pelena написал:
Вывод неутешительный. Этот макрос не будет работать в Mac Excel
печально(((
Подскажите, пожалуйста, данный макрос не будет работать только из за объекта? Если даже убрать CreateObject (который Вы выделили на скрине), я знаю как его заменить другим способом уже сталкивался с этим.... Нельзя никак сделать  что бы макрос запустился по событию?(
 
Макрос таки запускается по событию, если он расположен в "правильном" модуле книги
 
Pelena,спасибо )) буду пробовать
 
Цитата
Lucifer написал:
буду пробовать
Попробуйте, создав код в ЭтаКнига, переименовать модуль ЭтаКнига в ThisWorkbook(через свойства объекта Name в окне Properties). Скорее всего проблемы с неверным пониманием кодировки в имени модуля.
Ну и CreateObject обязательно убрать - MAC его не поймет. Можно заменить на Application.UserName, но это свойство далеко не всегда отображает того же пользователя, под которым вход был. Да и изменяется из самих настроек Excel без проблем.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий Щербаков,Спасибо за совет.
так же всем спасибо за помощь, все сделал, работает!  
Страницы: 1
Читают тему (гостей: 1)
Наверх