На главную страницу AlgoNet В сотрудничестве с ZDNet
АРХИВ СТАТЕЙ 2000-2-1 на главную / новости от 2000-2-1
AlgoNet.ru
поиск

 

Место для Вашей рекламы!

 

Все новости от 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 глюк остался а приведеное решение проблымы не работает.Что делать?
 

 

← январь 2000 1  2  3  4  7  8  9  10  11 март 2000 →
Реклама!
 

 

Место для Вашей рекламы!