Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Опять автофильтр Добавлено: 10.07.08 15:01  

Автор вопроса:  KiZ
Доброго времени суток. Опять у меня проблемы все с теми же автофильтрами.
Прошлая тема: http://www.vbnet.ru/forum/show.aspx?id=167130
Так я и не получил вразумительного ответа почему не хочет работать. Избавился от нее через другой выбор и вот опять.
Проблема такая:


SevData = "01.03.2005"
    Workbooks.OpenText Filename:= _
        "X:\lot.txt", Origin:=xlMSDOS, _
        StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(10 _
        , 1), Array(15, 1), Array(22, 1), Array(27, 1), Array(41, 1), Array(55, 1), Array(69, 1), _
        Array(83, 1), Array(97, 1), Array(111, 1), Array(120, 1), Array(136, 1), Array(149, 1), _
        Array(162, 1), Array(174, 1), Array(213, 1), Array(227, 1), Array(239, 1), Array(245, 1), _
        Array(249, 1)), TrailingMinusNumbers:=True
   
'(cut)

    Columns("A:A").Select
    Selection.Replace What:="-", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
       '   Selection.NumberFormat = "m/d/yyyy"
    With Selection
        .HorizontalAlignment = xlCenter
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
        .MergeCells = False
    End With


В первом столбце содержаться даты вида:
1-08-2008 или 21-08-2008 (т.е. через тире и без нулей спереди, если дата до 10 )

Делаю такую махинацию со столбцом. Вроде все ровно и даты впорядке.

Далее делаю вот это:
Selection.AutoFilter Field:=16, Criteria1:="=*СОК*", Operator:=xlAnd
    Selection.AutoFilter Field:=1, Criteria1:="<" & SevData

И опять после первого автофильтра все в порядке, после 2ого исчезают все строки.
Останавливаю макрос, выбираю условие первого столбца, там все как надо. нажимаю ENTER ячейки на месте, хотя до этого их не было.

Кстати, и жто главное, что фильтр не хочет работать даже так(т.е. вместо переменной конкретная дата):
Selection.AutoFilter Field:=1, Criteria1:="<21.03.2005"

Подозрение, что в формате дела....(Win 2000/XP, Exel 2003(и в той и втой винде не хочет работать))
Вот. Надеюсь понятно объяснил.

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 KiZ



Вопросов: 27
Ответов: 68
 Профиль | | #1 Добавлено: 10.07.08 15:05
Да вот такая фигня, что даты распознаются то с тире, то с точкой и приходится даже Реплейс делать))
и даже если формат даты у всего столбца поставить- не получается всеравно((

Ответить

Номер ответа: 2
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #2 Добавлено: 11.07.08 08:49
Попробуй собирать дату через DateSerial. Тогда мороки не будет с разделителями.

Ответить

Номер ответа: 3
Автор ответа:
 KiZ



Вопросов: 27
Ответов: 68
 Профиль | | #3 Добавлено: 11.07.08 10:44
Что-то не очень понял, что ты имеешь в виду.... Но эта функция натолкнула меня на мысль, Распозновать дату из текстовика не целиком, а дни отдельно, месяцы отдельно, год отдельно... потом сцепить в одно, как число... гемор, но может помочь.
А напиши пожалуйста примар, как в столбце использовать твою ф-цию?

Ответить

Номер ответа: 4
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #4 Добавлено: 11.07.08 12:13
В системе какой разделитель даты стоит ?

Ответить

Номер ответа: 5
Автор ответа:
 KiZ



Вопросов: 27
Ответов: 68
 Профиль | | #5 Добавлено: 11.07.08 12:39
Да в любой. Сначала же текстовый файл. Какую хочешь такую и ставь, только сейчас потыркал... 0 эммоций 8(

А вообще сейчас круто есть такая функция в экселе:
ДАТА. Если режешь текстовикне датой целиком, а отдельно число, месяц и год, то можно в соседней колонке соеденить этой функцией и формат поменять.... Сейчас посмотрим, слушается ли фильтр...

Ответить

Номер ответа: 6
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #6 Добавлено: 11.07.08 12:42
Сейчас дотестю и выложу пример.

Ответить

Номер ответа: 7
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #7 Добавлено: 11.07.08 12:48
Лови
  'отображение всего списка
  Range("A1:B1";).AutoFilter Field:=1
  Range("A1:B1";).AutoFilter Field:=2
  
  'из первого списка все содержащие СОК, из второго больше 1 марта 2008
  'в переменной формируется дата с системными разделителями,
  'но месяц и день нужно поменять местами для использования в фильтре.
  'В данном случае это 01 марта 2008
  Range("A1";).AutoFilter Field:=1, Criteria1:="=*СОК*", Operator:=xlAnd
  ;DateTxt = "3-01-2008"  'дата из файла в формате строка
  ;DateFilter = Replace(DateTxt, "-", "/";)
  Range("B1";).AutoFilter Field:=2, Criteria1:=">" & DateTxt, Operator:=xlAnd

  'из первого списка все содержащие СОК, из второго больше 1 февраля 2008
  'в переменной формируется дата с системными разделителями,
  'но месяц и день нужно поменять местами для использования в фильтре.
  'В данном случае это 01 февраля 2008
  Range("A1";).AutoFilter Field:=1, Criteria1:="=*СОК*", Operator:=xlAnd
  ;DateTxt = "2-01-2008"  'дата из файла в формате строка
  ;DateFilter = Replace(DateTxt, "-", "/";)
  Range("B1";).AutoFilter Field:=2, Criteria1:=">" & DateFilter, Operator:=xlAnd

  'из первого списка все содержащие СОК, из второго больше 20 февраля 2008
  'в переменной формируется дата с системными разделителями,
  'но месяц и день нужно поменять местами для использования в фильтре.
  'В данном случае это 20 февраля 2008
  Range("A1";).AutoFilter Field:=1, Criteria1:="=*СОК*", Operator:=xlAnd
  ;DateTxt = "2-19-2008"  'дата из файла в формате строка
  ;DateFilter = Replace(DateTxt, "-", "/";)
  Range("B1";).AutoFilter Field:=2, Criteria1:=">" & DateFilter, Operator:=xlAnd

  'из первого списка все, из второго меньше 1 апреля 2008
  'в переменной формируется дата с системными разделителями,
  'но месяц и день нужно поменять местами для использования в фильтре.
  'В данном случае это 01 апреля 2008
  Range("A1:B1";).AutoFilter Field:=1
  Range("A1:B1";).AutoFilter Field:=2
  ;DateTxt = "4-01-2008"  'дата из файла в формате строка
  ;DateFilter = Replace(DateTxt, "-", "/";)
  Range("B1";).AutoFilter Field:=2, Criteria1:="<" & DateFilter, Operator:=xlAnd

Ответить

Номер ответа: 8
Автор ответа:
 KiZ



Вопросов: 27
Ответов: 68
 Профиль | | #8 Добавлено: 11.07.08 14:44
Эх) чуть поздно. вот, что я сделал:
Распознавал дату в txtне одной колонкой, а так:
dd - mm - yyyy (т.е. 5 колонок, т.к. под тире еще сделал.) Потом добавил столбец в каждой ячейке которой такая функция: =ДАТА( yyyy,mm,dd)
т.е. если по столбцам, то 5,3, 1.
 
вот, так я сделал.) Огромное спасибо за помощь.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам