Новости:

Прикрепить к сообщению можно только файлы xls, gif, jpg, rar, zip,7z, bas, frm, cls, doc размером до 150 Кб.

Главное меню

Напоминание в EXCEL

Автор Cartman, 30.01.2009, 14:58

« назад - далее »

Cartman

Доброго времени суток.
вопрос: реально-ли организовать в EXCEL "напоминание" на определенное событие?
в одной ячейке событие, в другой - дата. реально-ли что б по дате выскакивало окошко с напоминанием данного события?
спасибо

Шпец Докапыч

Цитата: 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
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Cartman

Цитата: Шпец Докапыч от 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?

спасибо

Шпец Докапыч

Цитата: 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: Возможно, Вам также будет интересна тема: "Музыкальное сообщение по условию".
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Cartman

еще вопрос:

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

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

спасибо

Шпец Докапыч

Цитата: 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
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Cartman

не получается что...

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

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

на всякий случай подопытный файл во вложении.

Шпец Докапыч

Цитата: Cartman от 06.02.2009, 16:40
не получается что...

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

Давайте определимся: Вы сейчас нарисовали событий 8 разными вариантами. Т.е. планируете записывать их как ни попадя или же стилизуете под один вышеуказанный? И второй момент: может ли быть несколько записей за одно число? Если да, то как это будет выглядеть: в той же ячейке в новой строке (через Alt+Enter) или несколькими записями, которые надо собрать в одно напоминание?
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Cartman

это не бета-тестинг, это я пытался подобрать возможные варианты формата записи в ячейке :)

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

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

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

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

спасибо

Шпец Докапыч

Цитата: 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 втыкать в исходники
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Cartman

СУПЕР! заработало!!! спасибо!!!
предлагаю усложнить задачу
примитивно описал в форме макроса.
(основное - разделитель разных событий)
остальное во вложении

p.s.
если реализация сложна - ну значит надо самому знакомится с ВБА ))
спасибо

Шпец Докапыч

Цитата: 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


А что с остальными закладками? Вы хотите знать события на два дня (два события) вперёд что ли?
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Cartman

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

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

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

и еще б что б само окно имело вертикальную прокрутку )
и реально-ли задать диапазон напоминаний не в один столбец, а в несколько (например D1-D29 , F1-F29 и H1-H29) с такой-же структурой отображения как и первый ?

Шпец Докапыч

Цитата: 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, но это отдельная история, выходящая за рамки темы.
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Cartman

не работает (
показывает только "сегодняшние" события, следующие дни не показывает...

не могу понять как прописаны диапазоны ячеек, в которых ведется поиск напоминаний. например поиск должен происходить столбцах от D до G и M а заголовок к напоминанию в столбцах A и В тех же строках, где есть напоминание.
можно чуть подробнее про описание диапазонов поиска? (ну так что б от А1 до А100 + от В1 до В100 +... ну или как-то так... или так нельзя?)
спасибо