Таблица с суммарными денежными потоками рассмотренная в главе 19, служит больше, для отображения суммарного ежедневного денежного потока (ДП) и остатков денежных средств (ДС), по которым, при их недостатке, можно произвести расчет и стоимость привлекаемых заемных средств. Специалисты финансового отдела задумались над противоположной задачей — отсутствием детализации или аналитики этих денежных потоков в разрезе одного банковского дня. Такая детализация необходима для анализа проводимых кассовых операций и, при необходимости, последующего внесения корректировок в принимаемые управленческие решения, исправляющих возможные неприятности. Поэтому решено дополнить модель прогнозирования движения денежных потоков еще одним рабочим листом с таблицей платежного календаря, который будет отображать:
- остаток ДС на начало каждого дня;
- поступление и списание ДС в течение каждого дня как суммарного потока, так и в разрезе управленческих статей их учета;
- чистый денежный поток за день, как разность между поступлением и списанием ДС;
- поступление и списание ДС нарастающим итогом за день;
- суммарные обороты ДС за месяц по всем статьям управленческого учета.
Стратегический смысл самого платежного календаря заключается в том, чтобы найти узкие места в детализированных потоках ДС и по возможности устранить их. Ведь при положительном потоке за месяц в целом, могут быть всплески остатков ДС ниже нулевой отметки внутри этого месяца. Такая ситуация, когда не хватает денег для ведения оперативной хозяйственной деятельности, называется кассовым разрывом. Не применяя моделирования спрогнозировать возможное поведение наличности практически невозможно, да и исправить тоже. А это невыполнение взятых на себя обязательств с возможным последующим срывом бизнеса в целом или же дополнительными издержками для устранения нежелательных последствий, когда таковые становятся известны слишком поздно. Ведь известно, что стоимость приобретаемых товаров и услуг зачастую зависит от выполнения партнером взятых на себя обязательств.
Другой возможный смысл платежного календаря — оптимизация движения денежных средств (ДДС) с целью максимальной эффективности использования ресурсов, коими и являются деньги. Статьи ДДС в платежном календаре позволяют более эффективно взглянуть на происходящие процессы с целью создания бездефицитного платежного календаря, основанного на анализе предшествующих событий и прогнозировании будущих. Могут существовать различные подходы, например, желание "уложиться" в планируемые денежные ресурсы или расчет минимально возможных сумм привлекаемых кредитов и их стоимости при нехватке ДС. Платежный календарь позволит моделировать будущие потоки ДС по принципу "что-если" и находить более оптимальные варианты, например, в сроках оплаты. При кратковременном избытке денег, принимается решение не размещать их на депозите, а оплатить поставщикам за материалы (товары, услуги) с определенной заранее оговоренной скидкой. Или наоборот, предварительно провести переговоры с покупателем, с целью оплаты им товара ранее установленного срока с предоставлением ему скидки, а не привлекать краткосрочный кредит.
Пример классического платежного календаря
По логике в состав денежных потоков, как средства оплаты, входят непосредственно денежные средства — товар, обладающий мгновенной ликвидностью, так и их эквиваленты. В качестве эквивалентов выступают различные активы, полученные в качестве оплаты за реализованный товар (услуги). Это, как правило, другой товар (взаимозачет, бартер), векселя и пр. Но при поступлении этих эквивалентов сумма на банковском счете остается неизменной и ликвидность эквивалентов не является мгновенной. Поэтому рассматриваем платежный календарь, только для прогнозирования и фиксации непосредственно движения наличности.
В составе классического платежного календаря (рис. 21.1.) можно выделить три составляющих ДДС:
- денежный поток от основной деятельности;
- денежный поток от инвестиционной деятельности;
- денежный поток от финансовой деятельности
- с детализацией их на отдельные статьи.
Заполнение платежного календаря и расчеты, которые в нем производятся можно осуществлять самыми различными методами. Например, ввод данных в календарь с клавиатуры на основании произведенных ранее расчетов или предположений. Но этот метод при проведении предприятием активной и многоплановой деятельности не устраивает финансовый отдел. Должна присутствовать определенная стройная система, которая позволит как изменять одновременно массивы данных в платежном календаре, так и анализировать эти данные. Предполагается, что данные в календаре будут обновляться автоматически, на основании разработанного алгоритма и в качестве исходных данных будут использованы все полученные ранее результаты в модели прогнозирования денежных потоков.
Платежный календарь выступает как самый итоговый отчет, на основании которого будет планироваться и контролироваться кассовая жизнь предприятия. В качестве примера возможной автоматизации заполнения платежного календаря рассмотрим операцию поставки товара и получения средств по кредитной линии, рассмотренные в прошлых главах.
Рис. 21.1. Пример классического платежного календаря
Задачи автоматизации формирования платежного календаря
У модели ДенежныеПотоки присутствует существенный недостаток — невозможность просмотра проводимых операций в разрезе одного банковского дня при достаточном количестве введенных записей о проводимых операциях в исходную таблицу на рабочем листе ИсхДанные. Для этой цели введите в состав модели рабочий лист ПК с платежным календарем (рис. 21.2.). Непосредственные задачи автоматизации формирования платежного календаря:
- автоматически определить наименования приходных и расходных статей операций с наличностью и ввести их в графу Наименование, учитывая при этом принадлежность их либо к приходной либо к расходной составляющей платежного календаря;
- на основании введенного номера месяца, за который формируется платежный календарь, произвести выборку операций с наличностью только за этот месяц;
- определить номер года, за который проводится формирование платежного календаря и сформировать даты каждого дня в формате Excel;
- провести суммирование потоков операций с наличностью за каждый день по каждой статье платежного календаря и ввести эту сумму в платежный календарь на пересечении строки с наименованием этой операции и столбца с указанием этого номера дня месяца, в котором проведена операция;
- определить сумму ежедневных поступлений и расходования денежных средств, а также чистый денежный поток за день;
- определить с начала месяца по нарастающей суммы поступлений и расходования денежных средств;
- провести окончательные итоговые расчеты платежного календаря.
Рис. 21.2. Рабочий лист ПК с созданным платежным календарем и числовым примером за февраль месяц
Создание платежного календаря
Таблица непосредственно платежного календаря расположена в области ячеек С6:AI83. Строки 12:29 календаря выделены для формирования постатейно данных поступивших денежных средств, а строки 32:79 — для списанных.
Перед автоматическим заполнением платежного календаря в ячейку D2 с клавиатуры вводится номер месяца, за который будет формироваться платежный календарь. Промежуточные расчеты при формировании платежного календаря будут производиться в столбцах ВА:ВС.
Формирование наименований статей платежного календаря
Для формирования наименований статей платежного календаря предназначена подпрограмма ФормированиеСтатейКалендаря (рис. 21.3.). Статьи формируются на основании наименований операций, введенных в исходную таблицу на рабочем листе ИсхДанные. Причем, если наименование операции присутствует в исходной таблице, но не проводилась в месяце, за который формируется платежный календарь, эта статья будет все равно присутствовать в календаре. Это объясняется необходимостью унификации платежных календарей за любой период времени. Смысл такой унификации заключается, прежде всего, в наглядности, или желании человека искать вещи на привычном для него месте. Например, в одном месяце предприятие вело активную финансово-хозяйственную деятельность и статей расхода, по которым проводились операции, было 50, а в другом месяце всего 10, и в календаре отражены только статьи с проводимыми операциями. Руководитель, положив на стол два листа бумаги с распечатанными платежными календарями, больше времени потратит на поиск идентичных статей в этих таблицах, чем непосредственно на анализ содержащейся информации и принятие решений.
В подпрограмму входят на две других процедуры: ввод формул выбора наименований статей поступления (ДоходнаяЧасть) и статей списания денежных средств (РасходнаяЧасть). Сама же подпрограмма осуществляет только вставку выбранного текста наименований статей непосредственно в календарь.
В нашем примере в создаваемом платежном календаре можно разместить до 18 статей в доходной части календаря и 48 статей в расходной. При необходимости количество статей может быть уменьшено или увеличено, но тогда необходимо будет редактировать описанные далее макросы формирования платежного календаря и размеры таблицы, в которой календарь размещен.
Если нет необходимости в постоянном обновлении наименования статей при формировании платежного календаря, то тогда выполнение этой подпрограммы можно не производить, поставив перед ее именем в рассматриваемой далее подпрограмме ЗаполнениеПлатежногоКалендаря (рис. 21.5.) знак примечания.
Рис. 21.3. Подпрограмма ФормированиеСтатейКалендаря для формирования наименования статей поступления денежных средств
Формирование наименования статей поступления денежных средств
Прежде чем приступить к записи макроса ДоходнаяЧасть, введите формулы в ячейку ВА12:
=ЕСЛИ(ИсхДанные!I10=0;"";ЕСЛИ(ИсхДанные!H10=1;ИсхДанные!C10;0))
которая вначале проверяет — отличается ли значение в ячейке I10 рабочего листа ИсхДанные (поступление денежных средств) от значения 0. Если отличается, то проводится дополнительная проверка — введен ли признак денежных потоков в ячейку Н10 рабочего листа ИсхДанные. При выполнении этих условий формула возвращает текст наименования операции, введенную в ячейку С10 рабочего листа ИсхДанные.
И в ячейке ВВ12 формула:
=ЕСЛИ(BA12=BA13;0;BA12)
которая вступает в свои полномочия после замены содержимого диапазона ячеек ВА12:ВА5002, содержащих первую формулу на определенные ею значения и последующую их сортировку (по убыванию не считая первую строку строкой заголовка). После сортировки значений, текст одинаковых наименований статей будет содержаться только в смежных ячейках. Тогда эта формула, сравнив значения в двух смежных ячейках, при идентичном тексте возвратит значение 0, а при несовпадении — текст наименования статьи в ячейке находящейся выше. Таким образом, из всех ячеек, содержащим одинаковый текст наименования статьи во всем массиве данных будет выбрана только одна.
Для записи подпрограммы выполните следующие действия после начала записи макроса:
- выделите область ячеек ВА12:ВА22 и нажмите клавишу F2, после чего комбинацию клавиш Ctrl+Enter;
- не перемещая табличного курсора, скопируйте выделенный диапазон в буфер обмена и произведите вставку в тот же диапазон, вызвав диалоговое окно Специальная вставка, в котором активизируйте переключатель Значения;
- не перемещая табличного курсора, выполните сортировку выделенного диапазона по убыванию нажав кнопку Сортировка по убыванию на Стандартной панели инструментов. Таким образом, весь имеющийся список операций, связанных с поступлением наличности соберется в верхней части выделенного диапазона, причем в убывающем алфавитном порядке;
- выделите область ячеек ВВ12:ВВ22 и повторите все описанные действия;
- остановите запись макроса и, открыв Редактор Visual Basic, произведите редактирование выделяемых диапазонов ячеек, заменив их адреса на ВА12:ВА5002 и ВВ12:ВВ5002, а также отредактируйте текст кода VBA и введите примечания.
Рис. 21.4. Макрос ДоходнаяЧасть
Формирование наименования статей списания денежных средств
При создании макроса РасходнаяЧасть нет необходимости повторять все действия, выполненные при записи предыдущего. Скопируйте макрос ДоходнаяЧасть в Редакторе Visual Basic и заменив имя отредактируйте его, что заключается в замене ссылки на ячейку с I10 при вводе формулы в диапазон ячеек ВА:
""=IF(ИсхДанные!R[-2]C[-44]=0, ......"
на ссылку на ячейку J10:
""=IF(ИсхДанные!R[-2]C[-43]=0, ...."
Это относительная система ссылок и указывает на то что столбец I находится 44-м, а столбец J 43-м слева по отношению к столбцу ВА, в ячейки которого вводятся формулы.
Заполнение платежного календаря суммами ежедневных оборотов денежных средств
Подпрограмма ЗаполнениеПлатежногоКалендаряПоДатам (рис. 21.5.) состоит из трех составляющих:
- подпрограммы ФормулыЗаполненияПлатежногоКалендаря непосредственно для ввода формул, производящих расчет;
- цикла For-Next для последовательного ввода рассчитанных ежедневных оборотов ДС по каждой статье в платежный календарь;
- очистки содержимого области с введенными формулами промежуточных расчетов.
Критериями при выборе данных служат:
- номер месяца, введенный в ячейку D2 перед началом вычислений;
- номер дня выбранного месяца, вводимого циклом For-Next с помощью переменной X в ячейку ВА1, и при выполнении подпрограммы изменяющего значение от 1 до31;
- наименование статьи управленческого учета, сформированных ранее в платежном календаре в диапазоне ячеек С12:С79.
Рис.21.5. Подпрограмма ЗаполнениеПлатежногоКалендаряПоДатам
Формулы расчета ежедневных оборотов денежных средств
Для ввода формул определения ежедневных оборотов денежных средств запишите макрос ФормулыЗаполненияПлатежногоКалендаря, предварительно введя следующие формулы. В ячейке ВА10 формула:
=ЕСЛИ(МЕСЯЦ(ИсхДанные!D10)=$D$2;ЕСЛИ(ДЕНЬ(ИсхДанные!D10)=$BA$1;ИсхДанные!C10;0);0)
которая сначала определяет, соответствует ли номер месяца в дате, находящейся в ячейке D10 рабочего листа ИсхДанные номеру месяца, введенному в ячейку D2 рабочего листа ПК. При выполнении этого условия проверяется следующее условие — соответствует ли номер дня месяца этой даты номеру дня месяца, вводимого в ячейку ВА1 рабочего листа ПК. При выполнении этих условий формула возвращает наименование проводимой операции, введенной в ячейку D10 рабочего листа ИсхДанные. В противном случае формула возвращает значение 0.
Формула в ячейке ВВ10:
=ЕСЛИ(BA10=0;0;СУММ(ИсхДанные!I10:J10))
проверяет результат вычисления формулы в ячейке ВА10. Если результат не равен нулю, то формула суммирует значение поступления и списания денежных средств по этой операции, содержащихся в ячейках I10:J10 рабочего листа ИсхДанные. Суммирование значений доходных и расходных статей объясняется тем, что в ячейках I10:J10 значения одновременно содержаться не могут. Это должно обязательно учитываться при формировании таблицы на листе ИсхДанные, ведь иначе такая запись не будет иметь никакого смысла.
Формула в ячейке ВС12:
=СУММЕСЛИ($BA$10:$BA$5000;$C12;$BB$10:$BB$5000)
суммирует обороты движения денежных средств в области ячеек ВВ10:ВВ5000 за номер дня месяца, введенного в ячейку ВА1 и при условии, что текст наименования статьи в ячейке С12 идентичен тексту наименования статьи в области ячеек ВА10:ВА5000.
Запись макроса заключается в последовательном вводе этих формул в диапазоны ячеек BC12:BC79, ВА10:ВА5000 и ВВ10:ВВ5000.
Рис. 21.6. Подпрограмма ввода формул определения оборотов за день по каждой статье управленческого учета
Цикл заполнения платежного календаря ежедневными оборотами движения денежных средств
Основным элементом автоматического заполнения платежного календаря ежедневными оборотами ДДС является цикл For-Next. Последовательность выполняемых циклом операций в подпрограмме ЗаполнениеПлатежногоКалендаряПоДатам (рис. 21.5.) следующая:
- предварительно переменной Row (номер строки) присваивается значение 12, что соответствует номеру строки, с которой начинает формироваться текст наименований статей управленческого учета;
- задается выполнение циклов от 1 до 31, что соответствует максимальному количеству дней в месяце;
- переменной Х присваивается значение равное его предыдущему значению, увеличенному на единицу. Значение Х не было задано и в начале выполнения цикла оно будет равно нулю;
- текущее значение переменной Х присваивается ячейке ВА1 (номер дня месяца), по которой будет производиться выборка данных ранее введенными формулами в диапазоне ячеек ВА10:ВА5000;
- задается перерасчет введенных формул;
- копируется содержимое диапазона ячеек BC12:BC79, формулы которых возвращают различные значения при изменении значения ячейки ВА1;
- определяется ячейка в рабочей области платежного календаря с адресом на пересечении номера строки (Row) и номера столбца, равного значению 3 (столбцы А:С), увеличенному на значение переменной Х. Строка кода VBA Cells(Row, 3 + X). В эту ячейку производится вставка значений скопированного диапазона BC12:BC79. Переменная Х с каждым циклом увеличивается на единицу и происходит с каждым циклом переход на одну ячейку правее — D12. E12, F12, G12 и т.д. Переменную Row в этой подпрограмме можно не использовать, а просто указать значение 12, но так нагляднее.
Ввод дат и сальдо на начало дня
Задачей макроса КалендарьДатыСальдо (рис. 21.7.) является ввод формул:
- определения номера года, в котором может находиться вводимый в ячейку D2 номер месяца;
- даты, за которую производятся ежедневные расчеты в платежном календаре;
- остатков денежных средств на начало каждого дня.
Как помните, при создании таблицы на листе СуммПотоки было задано ограничение вертикального расположения таблицы строкой 200 или, исходя из рабочей области, таблица охватывает временной интервал в 198 дней. Ограничение было связано с увеличением скорости обработки информации. Причем алгоритм создания этой таблицы, самостоятельно определяет дату, с которой будет начинается этот временной интервал. Как следствие, если начальная дата находится во второй половине года, то временной интервал перейдет и на следующий год.
Кроме того, создавая различные приложения и модели, на протяжении всей книги, мы стремились к тому, чтобы пользователь при работе с компьютером делал как можно меньше ненужных движений. К таким "движениям" можно отнести и ввод номера года, за который будет формироваться платежный календарь. Поручим Excel самостоятельно производить выбор года. Основной критерий — год должен находиться во временном диапазоне, формируемом на листе СуммПотоки и определяться номером вводимого месяца в ячейку D2 на листе ПК.
Несмотря на кажущуюся сложность, задача довольно проста и определяется одной формулой, по критериям: заданный временной диапазон и значение номера месяца. Формула определения номера года в ячейке D3:
=ЕСЛИ(ИЛИ(ГОД(МИН(СуммПотоки!B3:B200))=ГОД(МАКС(СуммПотоки!B3:B200));МЕСЯЦ(МИН(СуммПотоки!B3:B200))<=D2);ГОД(МИН(СуммПотоки!B3:B200));ГОД(МАКС(СуммПотоки!B3:B200)))
в первом аргументе функции ЕСЛИ функция ИЛИ проверяет два условия:
- равен ли максимальный год в области дат на рабочем листе СуммПотоки минимальному номеру года в том же диапазоне. Простыми словами — будет ли в этом интервале встреча Нового года?;
- больше или равен минимальный номер месяца в этой же области дат номеру месяца в ячейке D2.
При соблюдении одного из условий, или обоих одновременно, формула возвращает минимальное значение года в области дат на рабочем листе СуммПотоки. В противном случае возвращается номер максимального года в этой же области.
Формула формирования даты в ячейке D6:
=ЕСЛИ(ЕОШ(СЦЕПИТЬ(D7;".";$D$2;".";$D$3)*1);0;СЦЕПИТЬ(D7;".";$D$2;".";$D$3)*1)
с помощью функции СЦЕПИТЬ соединяет в единое целое день (ячейка D7), месяц (ячейка D2) и год (ячейка D2). Алгоритм вычислений таких формул описан в главе 7. Цикл заполнения платежного календаря предполагает, что в месяце 31 день. Следовательно, как в нашем примере, если формировать календарь за февраль, в котором 28 дней, то, в этом месяце, начиная с 29-го числа, будет возвращаться значение ошибки #ЗНАЧ. Поэтому функцию СЦЕПИТЬ в первом аргументе функции ЕСЛИ проверяет функция ЕОШ, которая при обнаружении ошибки возвратит значение ИСТИНА. В таком случае функция ЕСЛИ возвратит значение 0, в противном — значение даты в формате Excel, созданной функцией СЦЕПИТЬ.
По этой дате формулой в ячейке D9 определяется остаток денежных средств на начало дня, используя остаток денежных средств в таблице денежных потоков на рабочем листе СуммПотоки:
=ЕСЛИ(ЕНД(ВПР(D6-1;СуммПотоки!$B$3:$E$200;4;ЛОЖЬ));0;ВПР(D6-1;СуммПотоки!$B$3:$E$200;4;ЛОЖЬ))
Основная функция поиска данных формулы — функция ВПР. При отсутствии даты в диапазоне поиска, для устранения возвращаемого формулой значения ошибки, в первом аргументе функции ЕСЛИ применена функция ЕНД. А функция ЕСЛИ выбирает — при отсутствии даты, возвращает значение 0, в противном случае значение остатка денежных средств на заданную дату, найденное функцией ВПР.
Запись макроса КалендарьДатыСальдо заключается в последовательном вводе этих формул в ячейки D3, D6:AH6 и D9:AH9 и последующем редактировании кода VBA после записи макроса.
Рис. 21.7. Подпрограмма КалендарьДатыСальдо
Итоговые расчеты платежного календаря
Подпрограмма КалендарьИтоговыеРасчеты (рис. 21.8.) довольно проста и заключается во вводе всех суммирующих формул в соответствующие диапазоны ячеек. В заключение подпрограмма выделяет весь рабочий лист и заменяет формулы на значения, после чего вводит в ячейку С1 формулу определения текущей даты и времени.
Рис. 21.8. Подпрограмма КалендарьИтоговыеРасчеты
Полный цикл заполнения платежного календаря
Для того чтобы все операции по заполнению платежного календаря происходили автоматически, напишите подпрограмму ЗаполнениеПлатежногоКалендаря (рис. 21.9.). Эта подпрограмма состоит из имен записанных ранее макросов, выполняющих заданные им процедуры расчетов. Для запуска макроса на выполнение создайте кнопку Заполнение платежного календаря (рис. 21.2.) и назначьте ей созданную подпрограмму.
Рис. 21.9. Подпрограмма ЗаполнениеПлатежногоКалендаря
Полный цикл расчета денежных потоков
Для полного расчета всей модели от перерасчета данных на листе ИсхДанные до расчета кредитной линии и заполнения платежного календаря запишите подпрограмму ПолныйРасчетДенежныхПотоков (рис. 21.10.), которая осуществляет весь цикл расчетов, описанный в главах создания модели ДенежныеПотоки. Запуск подпрограммы на выполнение поручите кнопке Полный расчет денежных потоков (рис. 21.2.).
Рис. 21.10. Подпрограмма ПолныйРасчетДенежныхПотоков полного расчета модели денежных потоков
Подпрограмма перепоручает созданным ранее процедурам УточненныйРасчетКредитнойЛинии (рис. 20.12.) и ЗаполнениеПлатежногоКалендаря (рис. 21.9.) выполнение всего цикла вычислений с момента перерасчета таблицы на листе ИсхДанные до заполнения платежного календаря. Кроме этого подпрограмма дополнена сервисными функциями:
- таймером, фиксирующем время выполнения всего цикла расчета;
- диалоговым окном, всплывающем при окончании вычислений;
- сворачиванием окна Excel на все время выполнения вычислений и последующем восстановлении его на весь экран по завершению выполнения подпрограммы.
Таймер
Скорость выполнения вычислений всей модели зависит от мощности компьютера и может колебаться от десятков секунд до нескольких минут. В нашей подпрограмме внедрение таймера носит больше обучающий характер.
Работа таймера основана на функции Timer, которая возвращает значение, представляющее число секунд, прошедших после полуночи. Вначале выполнения подпрограммы переменной Х присваивается значение функции Timer в момент нажатия на кнопку, запускающую выполнение вычислений. После выполнения подпрограммы переменной Х присваивается разность между текущим значением функции Timer и зафиксированном ранее значением переменной Х. Полученное значение округляется с помощью функции Round:
X = Application.Round((Timer — X), 0)
, иначе в диалоговом окне показывающим окончание цикла вычислений после целого значения секунд будет присутствовать несколько десятичных знаков.
Создание диалогового окна с помощью функции MsgBox
О возможности создания в Excel пользовательских диалоговых окон с помощью Редактора Visual Basic было написано в главе 5 (рис. 5.16.). Рассмотрим создание и применение диалогового окна с помощью функции MsgBox. Функция MsgBox выводит на экран диалоговое окно, содержащее сообщение и устанавливает режим ожидания нажатия кнопки пользователем.
Синтаксис функции:
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
содержит следующие основные именованные аргументы:
- prompt — обязательный аргумент. Это строковое выражение, отображаемое как сообщение в диалоговом окне. Максимальная длина строки prompt составляет приблизительно 1024 символов и зависит от ширины используемых символов.
- buttons — необязательный аргумент. Это числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Для получения справки по этому аргументу поместите курсор на эту функцию и нажмите клавишу F1 для вызова справки Редактора Visual Basic. Значение этого аргумента по умолчанию равняется 0.
- title — необязательный аргумент. Это строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения, например, Microsoft Excel.
В нашей подпрограмме в строке кода VBA:
MsgBox "Полная продолжительность расчета — " & X & " секунд(а/ы)", 0, "Модель прогнозирования движения денежных потоков"
у функции MsgBox имеются следующие аргументы:
- prompt — отображаемое текстовое сообщение, содержащее текст — Полная продолжительность расчета, затем значение переменной — X и текст — секунд(а/ы);
- buttons — присвоено значение 0, что говорит о том, что количество отображаемых кнопок одно — отображается только кнопка OK;
- title — текстовое выражение, отображаемое в строке заголовка диалогового окна: Модель прогнозирования движения денежных потоков.
Рис. 21.11. Созданное диалоговое окно Модель прогнозирования движения денежных потоков для отображения времени расчета модели и показывающее окончание проведения расчетов
Сворачиванием окна Excel на все время выполнения вычислений
Полный цикл расчета модели может длиться более одной минуты, и для того чтобы это не утомляло глаза при расчете параметров кредитной линии, применялось отключение обновления экрана (рис. 20.12.). Более эффективный способ — сворачивание окна Excel на время выполнения процедуры вычисления. Поэтому допишите две строчки кода VBA. В начале подпрограммы:
Application.WindowState = xlMinimized
и в конце:
Application.WindowState = xlMaximized
Присвоение свойству WindowState значения xlMinimized позволит свернуть окно Excel перед выполнением вычислений, а значение xlMaximized восстановит его во весь экран. В это время можно работать в других программах.
Итоги
Итак, на протяжении пяти глав постепенно создавалась модель прогнозирования денежных потоков. Эта глава как завершающая создания модели для проведения необходимых вычислений.
В этой главе был описан процесс от необходимости применения платежного календаря в деятельности предприятия по управлению наличностью до реализации проекта по его автоматическому формированию. Он несколько отличается от классического (рис. 21.1.), но это легко исправляется, например, организовав экспорт данных из созданного календаря в классический.
Практическое применение платежного календаря для производственного предприятия рассмотрено в главе 26.
|