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

Вход

Регистрация

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

 

= Мир MS Excel/Код макроса не всегда выполняется - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Код макроса не всегда выполняется
and23032 Дата: Суббота, 03.02.2024, 15:11 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте Уважаемые форумчане.

На четырех листах книги расположены однотипные таблицы, для удобства заполнения таблиц журнала были прописаны макросы по событию. В колонках для введения дат, по двойному клику ячейки, выбор даты в выпадающем календаре. В колонках: "I","J","K" , при изменении значений ячеек должен происходить расчет Предельного срока годности или Кол-во дней хранения.
Замечено, что макросы перестают выполнятся, если открыто несколько разных книг Excel. Приходится закрывать все книги и открывать только текущую.
Прошу знатоков подсказать, что можно подправить в коде, для корректной работы макросов , если открыто несколько книг.
[vba]
Код
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim iii As Integer
For iii = 2 To 100
With ActiveSheet
Application.EnableEvents = False
    If Cells(iii, "I").Value <> "" And Cells(iii, "J").Value <> "" And Cells(iii, "K").Value <> "" Then
    End If
    If Cells(iii, "I").Value <> "" And Cells(iii, "J").Value = "" And Cells(iii, "K").Value <> "" Then
    Cells(iii, "J").Value = Cells(iii, "I").Value + Cells(iii, "K").Value
    MsgBox "Предельный срок годности установлен!", vbOKOnly + vbInformation, "Срок Годности"
        ElseIf Cells(iii, "I").Value <> "" And Cells(iii, "J").Value <> "" And Cells(iii, "K").Value = "" Then
        Cells(iii, "K").Value = Cells(iii, "J").Value - Cells(iii, "I").Value
        MsgBox "Количество дней хранения установлено!", vbOKOnly + vbExclamation, "Дней Хранения"
        Else
     Application.EnableEvents = True
    End If
End With
Next

End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Worksheets("Приемка с технологом").Activate
    If Not Intersect(Target, Range("A:A,I:I,J:J")) Is Nothing Then
    Application.EnableEvents = False
        andcalendar.Show
        If andcalendar.Value = 0 Then
        ActiveCell = ""
        End If
        If andcalendar.Value > 0 Then
        Target = Format(andcalendar.Value, "dd/mm/yy")
End If
End If
    Application.EnableEvents = True

End Sub
[/vba]
К сообщению приложен файл: kontrol.xls (216.5 Kb)


Сообщение отредактировал and23032 - Суббота, 03.02.2024, 15:12
 
Ответить
СообщениеЗдравствуйте Уважаемые форумчане.

На четырех листах книги расположены однотипные таблицы, для удобства заполнения таблиц журнала были прописаны макросы по событию. В колонках для введения дат, по двойному клику ячейки, выбор даты в выпадающем календаре. В колонках: "I","J","K" , при изменении значений ячеек должен происходить расчет Предельного срока годности или Кол-во дней хранения.
Замечено, что макросы перестают выполнятся, если открыто несколько разных книг Excel. Приходится закрывать все книги и открывать только текущую.
Прошу знатоков подсказать, что можно подправить в коде, для корректной работы макросов , если открыто несколько книг.
[vba]
Код
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim iii As Integer
For iii = 2 To 100
With ActiveSheet
Application.EnableEvents = False
    If Cells(iii, "I").Value <> "" And Cells(iii, "J").Value <> "" And Cells(iii, "K").Value <> "" Then
    End If
    If Cells(iii, "I").Value <> "" And Cells(iii, "J").Value = "" And Cells(iii, "K").Value <> "" Then
    Cells(iii, "J").Value = Cells(iii, "I").Value + Cells(iii, "K").Value
    MsgBox "Предельный срок годности установлен!", vbOKOnly + vbInformation, "Срок Годности"
        ElseIf Cells(iii, "I").Value <> "" And Cells(iii, "J").Value <> "" And Cells(iii, "K").Value = "" Then
        Cells(iii, "K").Value = Cells(iii, "J").Value - Cells(iii, "I").Value
        MsgBox "Количество дней хранения установлено!", vbOKOnly + vbExclamation, "Дней Хранения"
        Else
     Application.EnableEvents = True
    End If
End With
Next

End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Worksheets("Приемка с технологом").Activate
    If Not Intersect(Target, Range("A:A,I:I,J:J")) Is Nothing Then
    Application.EnableEvents = False
        andcalendar.Show
        If andcalendar.Value = 0 Then
        ActiveCell = ""
        End If
        If andcalendar.Value > 0 Then
        Target = Format(andcalendar.Value, "dd/mm/yy")
End If
End If
    Application.EnableEvents = True

End Sub
[/vba]

Автор - and23032
Дата добавления - 03.02.2024 в 15:11
boa Дата: Воскресенье, 04.02.2024, 01:07 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 559
Репутация: 167 ±
Замечаний: 0% ±

365
and23032, здравствуйте,
что бы Cells ссылался на нужную книгу, надо добавить, как минимум, with Worksheets("Имя листа") ... end with
и перед каждым Cellsом, добавить точку
Cells, без предшествующего префикса, всегда ссылается на активный лист.
просто соблюдайте синтаксис.


 
Ответить
Сообщениеand23032, здравствуйте,
что бы Cells ссылался на нужную книгу, надо добавить, как минимум, with Worksheets("Имя листа") ... end with
и перед каждым Cellsом, добавить точку
Cells, без предшествующего префикса, всегда ссылается на активный лист.
просто соблюдайте синтаксис.

Автор - boa
Дата добавления - 04.02.2024 в 01:07
and23032 Дата: Воскресенье, 04.02.2024, 04:45 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
boa, здравствуйте.
Спасибо за помощь, отредактировал код, вроде проблема ушла.
 
Ответить
Сообщениеboa, здравствуйте.
Спасибо за помощь, отредактировал код, вроде проблема ушла.

Автор - and23032
Дата добавления - 04.02.2024 в 04:45
  • Страница 1 из 1
  • 1
Поиск:

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