Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: Cartman от 30.01.2009, 14:58

Название: Напоминание в EXCEL
Отправлено: Cartman от 30.01.2009, 14:58
Доброго времени суток.
вопрос: реально-ли организовать в EXCEL "напоминание" на определенное событие?
в одной ячейке событие, в другой - дата. реально-ли что б по дате выскакивало окошко с напоминанием данного события?
спасибо
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 30.01.2009, 21:03
Цитата: Cartman от 30.01.2009, 14:58
реально-ли организовать в EXCEL "напоминание" на определенное событие?

Реально. Вот инструкция:

В модуле приложения (Insert -> Module) размещаем код пользовательской функции:
Function ШСООБЩЕНИЕ(Текст As String) As String
  Application.Volatile
  MsgBox Текст
  ШСООБЩЕНИЕ = Текст
End Function
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 03.02.2009, 12:36
Цитата: Шпец Докапыч от 30.01.2009, 21:03
Цитата: Cartman от 30.01.2009, 14:58
реально-ли организовать в EXCEL "напоминание" на определенное событие?

Реально. Вот инструкция:

  • A1: =СЕГОДНЯ()
  • A8: =<требуемая дата>
  • B8: =ЕСЛИ(A8=A1;ШСООБЩЕНИЕ("Настало время познакомиться с VBA поближе.");"Осталось "&A8-A1&" дней.")

В модуле приложения (Insert -> Module) размещаем код пользовательской функции:
Function ШСООБЩЕНИЕ(Текст As String) As String
  Application.Volatile
  MsgBox Текст
  ШСООБЩЕНИЕ = Текст
End Function


спасибо
есть пару вопросов:
окошко выпрыгивает при любых действиях с любой ячейкой.
1) можно-ли сделать что б EXCEL сам ставил правильную дату в ячейчку СЕГОДНЯ ()?
2) можно-ли сделать что б напоминания выскакивали один раз при загрузке EXCEL?

спасибо
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 03.02.2009, 19:16
Цитата: Cartman от 03.02.2009, 12:36
можно-ли сделать что б напоминания выскакивали один раз при загрузке EXCEL?

Давайте рассмотрим и такой вариант...
В модуль книги (Alt+F11 -> дважды по ЭтаКнига), размещаем там:
Private Sub Workbook_Open()
  For Each i In Sheets("Лист1").[A1:A29]
    If Format(i, "dd.mm.yy") = Format(Now(), "dd.mm.yy") Then
      MsgBox i.Offset(0, 1).Value
    End If
  Next
End Sub


Теперь, найдя в диапазоне "A1:A29" сегодняшнюю дату, выскочит сообщение из смежной ячейки в "B1:B29".

PS: Возможно, Вам также будет интересна тема: "Музыкальное сообщение по условию" (https://forum.msexcel.ru/microsoft_excel/muzykalnoe_soobschenie_po_usloviyu-t843.0.html).
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 03.02.2009, 20:03
еще вопрос:

рельно-ли сделать что б макрос брал дату и текст напоминания из одной ячейки?
(например [03.02.09 "Настало время познакомиться с VBA поближе."]

и еще: можно-ли как-то сделать что б когда выскакивает окошко с сообщением сам EXEL продолжал работать? (т.е. что б можно было вносить изменения в таблицы не закрывая окошко с сообщением)

спасибо
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 05.02.2009, 22:03
Цитата: Cartman от 03.02.2009, 20:03
рельно-ли сделать что б макрос брал дату и текст напоминания из одной ячейки?
и еще: можно-ли как-то сделать что б когда выскакивает окошко с сообщением сам EXEL продолжал работать?

Реально, но вместо сообщения надо будет задействовать UserForm. Итак, инструкция...
В модуле книги ЭтаКнига:
Private Sub Workbook_Open()
  For Each i In Sheets("Лист1").[A1:A29]
    If InStr(1, i, Format(Now(), "dd.mm.yy")) Then
      msgText = Mid(i, InStr(1, i, """") + 1, InStrRev(i, """") - InStr(1, i, """") - 1)
      UserForm1.Show 0
    End If
  Next
End Sub


В обычном модуле (Insert -> Module):
Public msgText As String

Создаём пользовательскую форму (Insert -> UserForm), размещаем на ней Надпись (Label) и модуле формы (F7) прописываем:
Private Sub UserForm_Initialize()
  Me.Label1.Caption = msgText
End Sub
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 06.02.2009, 16:40
не получается что...

run-time error '5':
invalid procedure call or argument

пальцем показывает на строчку
msgText = Mid(i, InStr(1, i, """") + 1, InStrRev(i, """") - InStr(1, i, """") - 1)

на всякий случай подопытный файл во вложении.
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 06.02.2009, 19:43
Цитата: Cartman от 06.02.2009, 16:40
не получается что...

Это у Вас бета-тестинг такой: записать все возможные форматы даты-текста? :) Вроде как мы ориентировались на такой:
dd.mm.yy "текст"

Давайте определимся: Вы сейчас нарисовали событий 8 разными вариантами. Т.е. планируете записывать их как ни попадя или же стилизуете под один вышеуказанный? И второй момент: может ли быть несколько записей за одно число? Если да, то как это будет выглядеть: в той же ячейке в новой строке (через Alt+Enter) или несколькими записями, которые надо собрать в одно напоминание?
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 07.02.2009, 20:17
это не бета-тестинг, это я пытался подобрать возможные варианты формата записи в ячейке :)

стилизировать надпись лучше так:

7.02.09 Какая-то надпись

т.е. дата в таком формате и надпись без ковычек

было бы замечательно если б напоминание срабатывало как на одну и ту-же ячейку с разными датами, так и на разные ячейки. совместить это в одном окошке было бы отлично.

спасибо
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 07.02.2009, 20:47
Цитата: Cartman от 07.02.2009, 20:17
стилизировать надпись лучше так:
7.02.09 Какая-то надпись
т.е. дата в таком формате и надпись без ковычек

Как заказывали  ;):
в обычный модуль приложения:
Public msgText As String
в модуль книги (ЭтаКнига):
Private Sub Workbook_Open()
  msgText = ""
  For Each i In Sheets("Лист1").[A1:A29]
    If InStr(1, i, Format(Now(), "d.mm.yy")) Then
      If Len(msgText) > 0 Then msgText = msgText & Chr(10)
      msgText = msgText & Replace(i, Format(Now(), "d.mm.yy"), "")
    End If
  Next
  UserForm1.Show 0
End Sub


Цитироватьбыло бы замечательно если б напоминание срабатывало как на одну и ту же ячейку с разными датами...

С разными датами это как? Так?:
7.02.09, 10.02.09, 13.02.09-15.02.09 втыкать в исходники
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 07.02.2009, 23:30
СУПЕР! заработало!!! спасибо!!!
предлагаю усложнить задачу
примитивно описал в форме макроса.
(основное - разделитель разных событий)
остальное во вложении

p.s.
если реализация сложна - ну значит надо самому знакомится с ВБА ))
спасибо
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 08.02.2009, 00:13
Цитата: Cartman от 07.02.2009, 23:30
предлагаю усложнить задачу
примитивно описал в форме макроса.
(основное - разделитель разных событий)
остальное во вложении

Давайте поправим одну строчку:
     'msgText = msgText & Replace(i, Format(Now(), "d.mm.yy"), "") 'было
      msgText = msgText & i.Offset(0, -1) & Chr(10) & _
                Replace(i, Format(Now(), "d.mm.yy"), "") & Chr(10) & _
                "------------------------------------------" 'стало


И подрисуем заголовок для первой закладки:
Private Sub UserForm_Initialize()
  Me.Label1.Caption = msgText
  Me.MultiPage1.Pages(0).Caption = Format(Now(), "d.mm.yy")
End Sub


А что с остальными закладками? Вы хотите знать события на два дня (два события) вперёд что ли?
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 08.02.2009, 00:57
Цитата: Шпец Докапыч от 08.02.2009, 00:13
А что с остальными закладками? Вы хотите знать события на два дня (два события) вперёд что ли?
да. закладок много.. что-то я переборщил...

а как на счет что б в одном окне (как первоначальный вариант) собрать все события в таком формате:

дата
номер из столбца А текст из столбца В
напоминание из столбца D (т.е. столбцы идут не подряд, хотелось бы иметь возможность прописывать "нужный" диапазон)
---------------------------------------------------------- \\разделитель
дата
номер из столбца А текст из столбца В
напоминание из столбца D
---------------------------------------------------------- \\разделитель

и еще б что б само окно имело вертикальную прокрутку )
и реально-ли задать диапазон напоминаний не в один столбец, а в несколько (например D1-D29 , F1-F29 и H1-H29) с такой-же структурой отображения как и первый ?
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 08.02.2009, 01:25
Цитата: Cartman от 08.02.2009, 00:57
а как на счет что б в одном окне (как первоначальный вариант) собрать все события в таком формате:...

Да хоть в каком. Чувствуется, на этом не ограничится. ;)
      '...
      msgText = msgText & Format(Now(), "d.mm.yy") & Chr(10) & _
                Cells(i.Row, 1) & " " & Cells(i.Row, 2) & Chr(10) & _
                Replace(i, Format(Now(), "d.mm.yy"), "") & Chr(10) & _
                "------------------------------------------"
      With i.Offset(0, 1) 'плюс ещё один столбец
        If Len(.Value) > 0 Then
          msgText = msgText & Chr(10) & Left(.Value, InStr(1, .Value, " ")) & Chr(10) & _
                    Cells(i.Row, 1) & " " & Cells(i.Row, 2) & Chr(10) & _
                    Mid(.Value, InStr(1, .Value, " ") + 1, 999) & Chr(10) & _
                    "------------------------------------------"
        End If
      End With
    End If
  Next
  UserForm1.Show 0
End Sub


Цитироватьи еще б что б само окно имело вертикальную прокрутку )
Оно само, вернее Label, не имеет прокрутки. Вам надо либо размещать события в ListBox, либо прикручивать элемент ScrollBar, но это отдельная история, выходящая за рамки темы.
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 08.02.2009, 02:18
не работает (
показывает только "сегодняшние" события, следующие дни не показывает...

не могу понять как прописаны диапазоны ячеек, в которых ведется поиск напоминаний. например поиск должен происходить столбцах от D до G и M а заголовок к напоминанию в столбцах A и В тех же строках, где есть напоминание.
можно чуть подробнее про описание диапазонов поиска? (ну так что б от А1 до А100 + от В1 до В100 +... ну или как-то так... или так нельзя?)
спасибо
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 08.02.2009, 12:08
Цитата: Cartman от 08.02.2009, 02:18
не работает (
показывает только "сегодняшние" события, следующие дни не показывает...

А я и не подцеплял следующие.  ;)
См. вложение - там в коде указано где менять диапазон и как выглядит несмежный.
Плюс прикрутил ListBox.


***Файл временно удален из-за подозрения на вирусы.***
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 08.02.2009, 20:33
Цитата: Шпец Докапыч от 08.02.2009, 12:08
Цитата: Cartman от 08.02.2009, 02:18
не работает (
показывает только "сегодняшние" события, следующие дни не показывает...

А я и не подцеплял следующие.  ;)
См. вложение - там в коде указано где менять диапазон и как выглядит несмежный.
Плюс прикрутил ListBox.

что-то не так.. ругается на слово format  в шестой строке. говорит "Compile error: Can't find project or library"
что делать?
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 10.02.2009, 22:05
Цитата: Cartman от 08.02.2009, 20:33
говорит "Compile error: Can't find project or library"
что делать?

Первое, что следует проверить, когда не найдена библиотека:
Tools -> References на наличие строки:
MISSING: <название библиотеки>

И если такая есть, то переподключить эту библиотему через кн. "Brawse..."

А ещё можно уточнить на чём именно затык, если строку:
If InStr(1, i, Format(Now(), "d.mm.yy")) Then Call Text(i)
разложить на след. конструкцию:
    vr = Now()
    vrF = Format(vr, "d.mm.yy")
    If InStr(1, i, vrF) Then
      Call Text(i)
    End If
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 11.02.2009, 13:35
странно как-то.. опция References не активна..
переместил все коды в старый файл - ЗАРАБОТАЛО!! :)
спасибо!
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 15.02.2009, 11:12
Несколько вопросов:
1) каким образом можно задать диапазоны поиска для разных листов книги (в формате "Лист1" - С1:O100, "Лист2" - В1:В100 и т.д..)
2) можно-ли организовать обратную связь из окошка напоминания к ячейке, которая вызвала напоминание (к примеру для изменения даты или содержания напоминания) либо выделение этой ячейки.
3) как организовать поиск дат к примеру на 14 дней вперед? 14 раз прописать этот код добавляя каждый раз +1?
   For Each i In myRange 'ищем сегодня
       If InStr(1, i, Format(Now(), "d.mm.yy")) Then Call Text(i)
     Next
4) как организовать перенос по строкам напоминаний, которые не вмещается в выделенную область в ListBox'е

спасибо
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 28.02.2009, 12:11
как организовать закрытие формы по нажатию Esc ?
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 28.02.2009, 12:22
Цитата: Cartman от 28.02.2009, 12:11
как организовать закрытие формы по нажатию Esc ?

Надо написать реакцию на событие KeyDown, KeyUp или KeyPress.

Допустим на отжатие "Esc" будет так:
Private Sub UserForm_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 27 Then Unload Me
End Sub
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 28.02.2009, 13:16
не получается (
я так понимаю код вставлять в свойства формы? но не закрывает окошко
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 28.02.2009, 13:19
Цитата: Cartman от 28.02.2009, 13:16
я так понимаю код вставлять в свойства формы?

Создайте это событие для тех элементов, расположенных на форме, в которых может находиться фокус, когда возникнет желание нажать на "Esc". ;)
Название: Re: Напоминание в EXCEL
Отправлено: Cartman от 01.03.2009, 17:56
элементов вроде и не густо, а не получается...


Private Sub ListBox1_Click()

End Sub

Private Sub ListBox_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 27 Then Unload Me
End Sub

Private Sub UserForm_Initialize()
  Me.ListBox1.List = Split(msgText, Chr(10))
End Sub

Private Sub UserForm_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 27 Then Unload Me
End Sub


что не так?

p.s.
еще вопросик: как добавить еще один диапазон на другом листе книги? пробовал уже по всякому но так и не получилось (
Set myRange = Sheets("Лист1").Range("C6:P500")


спасибо
Название: Re: Напоминание в EXCEL
Отправлено: Mr.Kekc от 19.02.2010, 16:34
Я конечно мало чего тут понимаю, но не могли бы вы мне помочь?!
С этим все понятно, все получилось.
Цитата: Шпец Докапыч от 30.01.2009, 21:03
Цитата: Cartman от 30.01.2009, 14:58
реально-ли организовать в EXCEL "напоминание" на определенное событие?

Реально. Вот инструкция:

  • A1: =СЕГОДНЯ()
  • A8: =<требуемая дата>
  • B8: =ЕСЛИ(A8=A1;ШСООБЩЕНИЕ("Настало время познакомиться с VBA поближе.");"Осталось "&A8-A1&" дней.")

В модуле приложения (Insert -> Module) размещаем код пользовательской функции:
Function ШСООБЩЕНИЕ(Текст As String) As String
  Application.Volatile
  MsgBox Текст
  ШСООБЩЕНИЕ = Текст
End Function

Мне нужно сделать так, что бы это сообщение появлялось только 1 раз (у меня появляется 4 раза, т.к. у меня 4 даты? а будет больше) в самом начале и больше меня не беспокоило до следующего открытия файла, т.е. что бы я смог в нем работать и вносить изменения.
Не подскажите как такое провернуть?
Название: Re: Напоминание в EXCEL
Отправлено: Wasilic от 19.02.2010, 17:57
Цитата: Шпец Докапыч от 08.02.2009, 12:08
А я и не подцеплял следующие.  ;)
См. вложение - там в коде указано где менять диапазон и как выглядит несмежный.
Плюс прикрутил ListBox.
Уважаемый Шпец Докапыч! Файлик загружается с ТРОЯНОМ!!!!!!
Название: Re: Напоминание в EXCEL
Отправлено: Алексей Шмуйлович от 22.02.2010, 10:52
Цитата: Wasilic от 19.02.2010, 17:57

Уважаемый Шпец Докапыч! Файлик загружается с ТРОЯНОМ!!!!!!


Да нет. Вроде нормальный файлик. Проверил NOD32 со свежими базами. Спасибо за бдительность, но, видимо, Вам нужно проверить свою машину. Зараза могла прицепиться уже после скачивания.
Название: Re: Напоминание в EXCEL
Отправлено: Wasilic от 22.02.2010, 11:20
На нет и суда нет.
Но, в таком случае, эта зараза цеплялась бы ко всем открываемым файлам Экселя. Однако - только к этому.
У меня лицензионный Vba32 c ежедневным обновлением
Здесь  http://www.virusblokada.ru/   и здесь  http://anti-virus.by/ 
есть проверка в ОН-ЛАЙН.
Название: Re: Напоминание в EXCEL
Отправлено: Алексей Шмуйлович от 22.02.2010, 11:30
Да, действительно, пишет, что файл инфицирован.
Хорошо, спасибо. Файл пока с форума удаляю и передаю на анализ в NOD32
Название: Re: Напоминание в EXCEL
Отправлено: Mr.Kekc от 24.02.2010, 10:34
поправочка, цели изменились.
как исправить этот код
ЦитироватьPrivate Sub Workbook_Open()
 msgText = ""
 For Each i In Sheets("лист1").[C1:C350]
   If InStr(1, i, Format(Now(), "dd.mm.yy")) Then
     If Len(msgText) > 0 Then msgText = msgText & Chr(10)
     msgText = msgText & Replace(i, Format(Now(), "d.mm.yy"), "")
   End If
 Next
 UserForm1.Show 0
End Sub
чтобы сообщение выводил на дату, которая меньше или равна текущей минус 30 дней?
Т.е. если сегодня 24.02.2010, то он выводил сообщение, на дату равной или менее 23.03.2010.
Или на определенное выражение, если с датой невозможно.
Название: Re: Напоминание в EXCEL
Отправлено: Mr.Kekc от 25.02.2010, 13:46
Никто не знает как решить проблему?
Название: Re: Напоминание в EXCEL
Отправлено: Wasilic от 25.02.2010, 18:42
ИМХО проблема в вопросе.
Название: Re: Напоминание в EXCEL
Отправлено: oryol от 24.06.2010, 11:30
u menea excel 2007, hotelasi zdelati dokument s napominaniem, kto mojit pomo4i??? plizz
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 24.06.2010, 11:46
Что не устраивает в представленном напоминании?
Название: Re: Напоминание в EXCEL
Отправлено: oryol от 24.06.2010, 14:34
kak naiti eti functii (

(добавлено)
nasol, sorii
Название: Re: Напоминание в EXCEL
Отправлено: oryol от 25.06.2010, 10:20
4to nado zdelati 4tobi etot dokument kakto napomnil o sebe kogda deni napomenanie nastupil?
Название: Re: Напоминание в EXCEL
Отправлено: oryol от 25.06.2010, 10:53



kak budet vangliskom variante?
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 25.06.2010, 11:47
ЕСЛИ = IF. См. весь перечень соответствий в теме "список формул на рус и англ языках" (https://forum.msexcel.ru/empty-t3101.0.html)
Вместо [;], разделителем аргументов по умолчанию в англ. версии служит [,]. Если русское название пользовательской функции не прокатит, то в формуле и коде надо прописать тоже латинскими: ШООБЩЕНИЕ = SHMSG

Function SHMSG(txt As String) As String
  Application.Volatile
  MsgBox txt
  SHMSG = txt
End Function
Название: Re: Напоминание в EXCEL
Отправлено: oryol от 25.06.2010, 12:54
nat takovo SHMSG

(добавлено)
gde mojno po4itati, kak eto mojno zdelati ot А до Я???
Название: Re: Напоминание в EXCEL
Отправлено: Шпец Докапыч от 25.06.2010, 13:34
Можешь посмотреть здесь: "Как создавать свои функции" (http://www.vertex42.com/ExcelArticles/user-defined-functions.html) (en.)
Название: Re: Напоминание в EXCEL
Отправлено: oryol от 26.06.2010, 10:43
nu tipa 4islo ia zdelal stobi fihadilo mne kogda nujen deni, no hotelasi sprositi kak zdelati 4tobi failik sam prokri4al ili dal o sebe znati, 4to sevodnia deni kotorii nujen?
Название: Re: Напоминание в EXCEL
Отправлено: ExDD от 23.05.2011, 21:55
Подскажите пожалуйста. Я в ВБА не в зуб ногой, но очень надо сделать нечто подобное вашей напоминалке в Экселе.
Есть даты в столбце A, кроме того номера договора (B), фамилия исполнителя (С), регион и телефон контакта(D).
Пытаюсь писать код как у вас, но после открытия файла, выдаётся только пустое окошко. В каких-то командах начал разбираться, но глубоко вникнуть не получается.
Получается вывести только значение одной ячейки с помощью offset, а уже более сложное - не осиливаю.
Мне хотелось бы, чтобы окошко выдавало все данные из строк с совпадающим значением даты. То есть:
25.05.2011 №... ФИО исполнителя и телефон. И так все совпадающие.
В идеале бы ещё и на ближайшие пару дней.
Надеюсь ветка ещё жива и помощь придёт)
Заранее спасибо.

Private Sub Workbook_Open()
  msgText = ""
  For Each i In Sheets("Лист1").[A2:A100]
    If InStr(2, i, Format(Now(), "dd.mm.yy")) Then
      If Len(msgText) > 0 Then msgText = msgText & Chr(10)
       msgText = msgText & Format(Now(), "dd.mm.yy") & Chr(10) & _
                Cells(i.Row, 1) & " " & Cells(i.Row, 2) & Chr(10) & _
                Replace(i, Format(Now(), "dd.mm.yy"), "") & Chr(10) & _
                "------------------------------------------"
      With i.Offset(0, 1) '???? ??? ???? ???????
        If Len(.Value) > 0 Then
          msgText = msgText & Chr(10) & Left(.Value, InStr(1, .Value, " ")) & Chr(10) & _
                    Cells(i.Row, 1) & " " & Cells(i.Row, 2) & Chr(10) & _
                    Mid(.Value, InStr(1, .Value, " ") + 1, 999) & Chr(10) & _
                    "------------------------------------------"
        End If
      End With
    End If
  Next
  UserForm1.Show 0
End Sub

P.S. Кстати, при отладке кода, заметил, что выполнение не входит в основной цикл.
то есть программа доходит до:

For Each i In Sheets("Лист1").[A2:A100]
   If InStr(1, i, Format(Now(), "dd.mm.yy")) Then
Условие не выполняется и он уходит в конец цикла, после чего история повторяется.
Название: Re: Напоминание в EXCEL
Отправлено: ExDD от 25.05.2011, 21:49
Спасибо, всё сделал сам)) Книжка по VBA и ваш код в помощь)
Название: Re: Напоминание в EXCEL
Отправлено: A_00016 от 28.08.2020, 11:06
Всем привет.
Очень актуальная тема для меня.
Подскажите как получить последние файлы с реализованными решениями? (если нет возможности, помогите с решением. Я в ВБА полный ноль).

У меня такая же необходимость в напоминалке.
Есть список Клиентов (название листа, порядок и расположение столбцов реальное) с:
1 названием компании
2 контактная инфа
3 дата созвона
4 дата тендера

Что хотелось бы:
напоминалку с закладками на 7 дней (на 1 дату (столбец K) одна закладка, в ней перечень компаний с короткой инфой. Друг от друга данные можно отделить как-то).

Короткая инфа по компании:
1 название компании (столбец D)
2 контактная инфа (столбец F)
3 дата тендера (столбец M)

Также было бы удобно вызывать напоминалку кнопкой на листе или сочетанием клавиш после обновления данных на листе.

Название: Re: Напоминание в EXCEL
Отправлено: A_00016 от 01.09.2020, 17:09
Что сейчас имеется:

В модуле книги ЭтаКнига:

Private Sub Workbook_Open()
  msgText = ""
  For Each i In Sheets("Лист1").[D1:D29]
    If InStr(1, i, Format(Now(), "d.mm.yy")) Then
      If Len(msgText) > 0 Then msgText = msgText & Chr(10)
      msgText = msgText & Format(Now(), "d.mm.yy") & Chr(10) & _
                Cells(i.Row, 1) & " " & Cells(i.Row, 2) & Chr(10) & _
                Replace(i, Format(Now(), "d.mm.yy"), "") & Chr(10) & _
                "------------------------------------------"
      With i.Offset(0, 1) 'плюс ещё один столбец
        If Len(.Value) > 0 Then
          msgText = msgText & Chr(10) & Left(.Value, InStr(1, .Value, " ")) & Chr(10) & _
                    Cells(i.Row, 1) & " " & Cells(i.Row, 2) & Chr(10) & _
                    Mid(.Value, InStr(1, .Value, " ") + 1, 999) & Chr(10) & _
                    "------------------------------------------"
        End If
      End With
    End If
  Next
  UserForm1.Show 0
End Sub


В обычном модуле (Insert -> Module):

Public msgText As String


Создаём пользовательскую форму (Insert -> UserForm), размещаем на ней Надпись (Label) и модуле формы (F7) прописываем:

Private Sub MultiPage1_Change()

End Sub

Private Sub UserForm_Initialize()
  Me.Label1.Caption = msgText
  Me.MultiPage1.Pages(0).Caption = Format(Now(), "d.mm.yy")
End Sub



В результате:
Дата и текст напоминания берутся из одной ячейки – у меня дата в одной ячейке, данные в других ячейках.
В примере, дата в столбике D – у меня в столбике К
В примере данные берутся из столбиков «В», «А», «D» - у меня должны браться из столбиков «D», «F», «М»
Учитывая большое количество событий, нужна полоса прокрутки – не все помещается на экране.
После обновления данных в экселе для запуска напоминалки нужна кнопка – закрывать, а потом открывать файлик долго.