Все новости от 1 февраля 2000 г. Письмо читателя: как я столкнулся с проблемой 2000 года
И где бы Вы думали? - В пакете MS EXCEL !
Если бы услышал об этом от кого -то другого, - никогда бы не поверил.
Действительно, все переменные по умолчанию -VARIANT, аж по 16 байтов, форматов для даты хватает. Если мало стандартных, - можете сконструировать дополнительные. Все офисные проблемы, - кадры, бухгалтерия, склад, зарплата, всяческие б/д типа счетов-фактур, учета запчастей, писем, договоров, контроль исполнения приказов, путевые листы..., достаточно резво решаются на базе этого пакета, образуя единую, целостную систему управления предприятием, крепко "сшитую" в плане единства используемых типов данных. Только EXCEL и ничего больше.
(Прошу воспринять этот абзац не как рекламу фирме Билла Гейтса, а как обычный факт, проверенный на практике.)
И тут: "Приехали.", - как говорится.
Далее - более сухо, без эмоций.
Постановка: Автоматизировать некоторый фрагмент в , например, складской или кадровой задачах, - быстро составить отчет об объектах "с истекшим сроком хранения", - список соответствующих продуктов или лиц с заканчивающимся сроком контракта, который следует своевременно либо продлить либо подготовить приказ об увольнении.
Модель: Изображена на рис.1. На нем - табличная база данных EXCEL по которой следует сделать выборку, ячейка с вводимой датой и кнопкой соответствующего макроса. Формат даты в ячейке для запроса и в столбце "срок хранения" ДД.ММ.ГГГГ. В самой книге EXCEL три листа: "База", "Рабочий" и "Модуль1" с текстом макроса, который приведен ниже.
|
Рис. 1. Иллюстрация модели для анализа рассматриваемой ситуации.
|
Макрос: При нажатии на кнопку, считывается дата запроса из ячейки F7, устанавливается автофильтр по столбцу срока, создается искомая выборка по условию < =, которая затем копируется на рабочий лист откуда ее можно распечатать.
Текст макроса:
Sub тест_2000()
' очистить место для вывода выборки в рабочем листе
Sheets("Рабочий").Select
Range("A10:U610").Select
Selection.ClearContents
Range("A10").Select
' прочесть дату из F7 и подготовить условие выборки
Sheets("База").Select
Range("F7").Select
da = ActiveCell
dat = "<=" & da
' Установить Автофильтр
Range("A10:F10").Select
Selection.AutoFilter
' Сделать выборку по условию
Selection.AutoFilter Field:=6, Criteria1:=dat, Operator _
:=xlAnd
' Скопировать выборку на рабочий лист
Range("A8").Select
ActiveCell.Range("A1:F610").Select
Selection.Copy
Sheets("Рабочий").Select
Range("A8").Select
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
' Вернуться в лист "база"
Sheets("База").Select
Application.CutCopyMode = False
Range("F7").Select
' Убрать Автофильтр
'(при экспериментировании не задействовать следующие два оператора)
'Range("A10:F10").Select
'Selection.AutoFilter
End Sub
Сама ситуация:
Экспериментируя с этой моделью, Вы обнаружите, что:
1. После отработки запущенного макроса искомая выборка не создастся.
2. Если затем нажать на стрелку автофильтра в столбце срока и выбрать "условие", то в появившемся диалоговом окне (рис.2) обнаружится, что у даты отсутствуют цифры века, то есть 19. (Если в ячейке F7, например 12.12.1999, то в диалоговом окне,-12.12.99
3. Если , ничего не меняя и видя перед глазами упомянутое окно, нажать "ОК", то выборка создастся!!!
4.Если снова тут же просмотреть диалоговое окно условия автофильтра, то недостающие цифры века появятся.
|
Рис.2. Диалоговое окно автофильтра с усеченной датой.
|
Так что в итоге выборка получена, но действия 2,3 выполнены "вручную". Что делать?
Только не бежать в MS с требованиями прокомментировать ситуацию или еще пуще, - вносить исправления в пакет, ибо есть решение и очень простое.
Решение:
Макрос будет отрабатывать как положено, если изменить формат в ячейке для даты запроса (F7) с ДД.ММ.ГГГГ на числовой с 0 знаками после точки.
Более грамотно это оформляется так:
- Ячейка F6, например, форматируется как ДД.ММ.ГГГГ
- Дата в ячейке запроса (F7) заменяется ссылкой на вышеупомянутую ячейку F6 (=F6)
- Ячейка F7 форматируется как число с 0 знаками после точки и цвет текста устанавливается равным цвету фона (чтобы визуально скрыть содержимое ячейки)
С уважением, постоянный читатель Вашего журнала
С.В. Бутырин
| Урманов Валера - u_valerymailru.com 27 Apr 2001 12:47 PM |
В EXCEL 2000 глюк остался а приведеное решение проблымы не работает.Что делать? |
|
|