Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 16.09.2011
Сообщений: 29

Автоматическое форматирование Outlook

16.09.2011, 14:11. Показов 3309. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Встала задача визуально выделять сообщения в реальном времени, полученные пол часа назад и более. Условие полчаса назад функция автоформат не понимает. На VBA для Outlook не работал - с объектами пока не разобрался. Подскажите как можно это реализовать? возможно средствами VBA.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.09.2011, 14:11
Ответы с готовыми решениями:

Условное форматирование писем в Outlook на VBScript
Доброго времени суток! Возникла необходимость написать скрипт, который по заданным критериям создавал бы правила условного...

Автоматическое форматирование простых дробей
Здравствуйте, столкнулся с проблемой, есть документ в котором очень много простых дробей и они напечатаны в виде 1/2 хотелось бы их...

Outlook. Автоматическое сохранение вложений
Для автоматического сохранения вложений при приеме новых писем у меня поставлен следующий макрос: Private Sub Application_NewMail() ...

16
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
21.09.2011, 15:46
richhamm,
задача не понятна.
0
0 / 0 / 0
Регистрация: 16.09.2011
Сообщений: 29
21.09.2011, 16:52  [ТС]
Вот накидал пока что смог разобраться. Создается новое представление с определенными параметрами.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub ChangeCurrentView()
    Dim myOlExp As Outlook.Explorer
    Dim myView, clViews As Views
 
    Set myOlExp = application.ActiveExplorer
    If myOlExp.CurrentFolder = "Входящие" Then
        myOlExp.CurrentView = "Сообщения"
    End If
Set clViews = application.ActiveExplorer.CurrentFolder.Views
    clViews.Remove ("Actions")
Set myView = clViews.Add("Actions", Outlook.OlViewType.olTableView)
    myView.Save
    myView.Apply
End Sub
Не знаю какие параметры вставить чтобы хотябы цвет текста в поле "тема" поменялся. что-то в роде "cells.interior" в экселе.
Дальше условие вставить: если "сейчас" = "время получения сообщения" - "30 минут" то "выделить его тем-то цветом"
0
0 / 0 / 0
Регистрация: 16.09.2011
Сообщений: 29
23.09.2011, 10:33  [ТС]
Научился менять цвет в автоформате

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub ChangeCurrentView()
    Dim myOlExp As Outlook.Explorer
    Dim myView, clViews As Views
    Set myOlExp = Application.ActiveExplorer
    If myOlExp.CurrentFolder = "Входящие" Then
        myOlExp.CurrentView = "Сообщения"
    End If
Set clViews = Application.ActiveExplorer.CurrentFolder.Views
    clViews.Remove ("Actions")
Set myView = clViews.Add("Actions", Outlook.OlViewType.olTableView)
    myView.Save
    myView.Apply
    
    
Dim olkView As Outlook.View, _
    olkFont As Outlook.ViewFont, _
    olkAFR As Outlook.AutoFormatRule
    Dim mtime As Date
    Set olkView = Application.ActiveExplorer.CurrentView
    Set olkAFR = olkView.AutoFormatRules.Add("просрочка")
    With olkAFR
    mtime = Now()
        .Filter = Chr(34) & "urn:schemas:httpmail:datereceived" & Chr(34) & "<= '" & mtime & "'"
        Set olkFont = .Font
        With olkFont
            .Name = "Arial"
            .Color = 5
        End With
        .Enabled = True
    End With
    olkView.Save
    olkView.Apply
    Set olkView = Nothing
    Set olkFont = Nothing
    Set olkAFR = Nothing
End Sub
подскажите как расчитать разницу now() минус 30 минут? переменная mtime
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
23.09.2011, 10:55
Visual Basic
1
2
3
4
5
6
7
Sub Процедура2()
Dim Дата1 As Date, Дата2 As Date
Дата1 = Now()
Debug.Print Дата1
Дата2 = DateAdd(Interval:="n", Number:=30, Date:=Now())
Debug.Print Дата2
End Sub
Чтобы увидеть работу кода: View - Immediate Window.

И при объявлении переменных, нужно для каждой переменной указывать её тип, если вы хотите (это отличает VBA от др. языков программирования):
Visual Basic
1
Dim myView As Views, clViews As Views
1
0 / 0 / 0
Регистрация: 16.09.2011
Сообщений: 29
23.09.2011, 13:02  [ТС]
Busine2009, Спасибо. попробовал вариант, вроде все нормально, но на практике выделяет цветом все сообщения, а условие не работает

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Sub ChangeCurrentView()
    Dim myOlExp As Outlook.Explorer
    Dim myView, _
    clViews As Views
    Set myOlExp = Application.ActiveExplorer
    If myOlExp.CurrentFolder = "Входящие" Then
        myOlExp.CurrentView = "Сообщения"
    End If
Set clViews = Application.ActiveExplorer.CurrentFolder.Views
    clViews.Remove ("Actions")
Set myView = clViews.Add("Actions", Outlook.OlViewType.olTableView)
    myView.Save
    myView.Apply
    
    
Dim olkView As Outlook.View, _
    olkFont As Outlook.ViewFont, _
    olkAFR As Outlook.AutoFormatRule
    Dim mtime As Date
    Set olkView = Application.ActiveExplorer.CurrentView
    Set olkAFR = olkView.AutoFormatRules.Add("просрочка")
    With olkAFR
    mtime = DateAdd(Interval:="n", Number:=-30, Date:=Now())
    
        .Filter = Chr(34) & "urn:schemas:httpmail:datereceived" & Chr(34) & ">= '" & mtime & "'"
        Set olkFont = .Font
        With olkFont
            .Name = "Arial"
            .Color = 5
        End With
        .Enabled = True
    End With
    olkView.Save
    olkView.Apply
    Set olkView = Nothing
    Set olkFont = Nothing
    Set olkAFR = Nothing
End Sub
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
23.09.2011, 13:10
richhamm,
после 23 строки вашего кода напишите строку:
Visual Basic
1
debug.print mtime
и узнайте, что находится в переменной mtime
1
0 / 0 / 0
Регистрация: 16.09.2011
Сообщений: 29
23.09.2011, 13:25  [ТС]
там во это:
23.09.2011 09:32:36

а сам фильтр выглядит так:
"urn:schemas:httpmail:datereceived"< = '23.09.2011 09:33:39'
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
23.09.2011, 13:28
richhamm,
а если в 25 строке не использовать переменную, а просто дату и время поставить, то будет работать?

Цитата Сообщение от richhamm Посмотреть сообщение
<=
в #6 в другую сторону.
0
0 / 0 / 0
Регистрация: 16.09.2011
Сообщений: 29
23.09.2011, 13:33  [ТС]
да, работает если в полном форматею
знак сравнения особой роли не играет, у меня в папке и ранее и позднее сообщения относительно даты
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
23.09.2011, 13:40
Цитата Сообщение от richhamm Посмотреть сообщение
в полном форматею
что за полный формат?
0
0 / 0 / 0
Регистрация: 16.09.2011
Сообщений: 29
23.09.2011, 13:59  [ТС]
нашел косяк! он время в переменной отнимает от UTC, а когда вручную вводишь то по местному

Добавлено через 14 минут
Теперь другая проблема, как только переходишь в другую папку, так все форматирование слетает. есть какое-то условие запуска макроса при preview сообщения в папке? спасибо
как Private Function при предпросмотре сообщения()
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
23.09.2011, 14:01
richhamm,
а как проверить работу вашего кода?
0
0 / 0 / 0
Регистрация: 16.09.2011
Сообщений: 29
23.09.2011, 16:56  [ТС]
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Sub ChangeCurrentView()
    Dim myOlExp As Outlook.Explorer
    Dim myView As View
    Dim clViews As Views
    Set myOlExp = Application.ActiveExplorer
    If myOlExp.CurrentFolder = "Âõîäÿùèå" Then
        myOlExp.CurrentView = "Ñîîáùåíèÿ"
    End If
Set clViews = Application.ActiveExplorer.CurrentFolder.Views
    clViews.Remove ("Actions")
Set myView = clViews.Add("Actions", Outlook.OlViewType.olTableView)
    myView.Save
    myView.Apply
    
    
Dim olkView As Outlook.View, _
    olkFont As Outlook.ViewFont, _
    olkAFR As Outlook.AutoFormatRule
    Dim mtime As Date
    Dim mtime1 As String
    Set olkView = Application.ActiveExplorer.CurrentView
    Set olkAFR = olkView.AutoFormatRules.Add("ïðîñðî÷êà")
    With olkAFR
    mtime = DateAdd(Interval:="n", Number:=-330, Date:=Now())
        .Filter = Chr(34) & "urn:schemas:httpmail:datereceived" & Chr(34) & "<= '" & mtime & "'"
        Debug.Print olkAFR.Filter
        Set olkFont = .Font
        With olkFont
            .Name = "Arial"
            .Color = 5
        End With
        .Enabled = True
    End With
    olkView.Save
    olkView.Apply
    Set olkView = Nothing
    Set olkFont = Nothing
    Set olkAFR = Nothing
End Sub

Вот итоговый код.
в outlook выделяем папку входящие (или другую), далее запускаем макрос - он синим выделит сообщения у которых время получения позднее 30 минут (по UTC 330 минут), остальные сообщения не тронет. но как только меняешь папку, то все сообщения становятся синими.

Добавлено через 2 часа 50 минут
Visual Basic
1
2
3
Private Sub Application_Startup()
    Call ChangeCurrentView
End Sub
такой код например для автозапуска при старте приложения. нужен вызов макроса по эвенту обращения к сообщению. типо mailItem_selection....
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
24.09.2011, 16:33
Цитата Сообщение от richhamm Посмотреть сообщение
такой код например для автозапуска при старте приложения. нужен вызов макроса по эвенту обращения к сообщению. типо mailItem_selection....
не понятно: это вопрос или ответ?
0
0 / 0 / 0
Регистрация: 16.09.2011
Сообщений: 29
26.09.2011, 10:58  [ТС]
Цитата Сообщение от Busine2009 Посмотреть сообщение
не понятно: это вопрос или ответ?
это вопрос: как сделать запуск макроса по эвенту - "просмотр сообщения"?
0
0 / 0 / 0
Регистрация: 16.09.2011
Сообщений: 29
30.09.2011, 09:33  [ТС]
Помогите, пожалуйста, найти для outlook функцию аналогичную application.ontime. Она как раз подойдет для этих целей
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2011, 09:33
Помогаю со студенческими работами здесь

Outlook автоматическое сохранение вложенных файлов
Здравствуйте! Заранее прошу не судить строго, т.к. впервые в жизни делаю нечто подобное. На основе подсмотренного в одной из тем этого...

Автоматическое форматирование в textBox
Здравствуйте. Мучаюсь этим вопросом уже долгое время. В textBox вводится некоторое число максимальной длиной до 12 цифр. При вводе...

Автоматическое форматирование кода
Здравствуйте, есть ли у кого-то готовое решение для автоматического форматирования кода. Это может быть макрос для любого текстового...

Автоматическое форматирование кода
Подскажите, пожалуйста, горячую клавишу, которая сортирует код. К примеру, из такого { { { { //----- } } }

Автоматическое форматирование кода
Доброго времени суток. Загорелся я идеей сделать редактор с возможностью автоматического форматирования исходного кода для скриптового...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru