Страницы: 1 2 След.
RSS
Некорректное заполнение одномерного массива данными, Нумерация элементов массива
 
Здравствуйте!

Подскажите пожалуйста, по какой причине в массив не попадает последний элемент коллекции?

Файл прилагаю.

С уважением.
ПАХОМ
Изменено: Werty - 22.02.2013 23:03:03 (Сделайте пожалуйста проверку: есть слова в посте "прилагаю файл" - значить должен быть файл. )
Спокойствие - величайшее проявление силы.
 
Цитата
Werty пишет:
Файл прилагаю.
Точно?
 
Юрий М! Здравствуйте!

Файл прикрепил :)
Спокойствие - величайшее проявление силы.
 
Привет, охотник! Может я чего не понял, но шестёрка в фильтре присутствует...
 
По окончанию макроса в автофильтре не отображается цифра 6. Я вот думаю может она как текст в массив попадает ...
Спокойствие - величайшее проявление силы.
 
Если посмотреть в окне Lokals, то 6 в массив попадает. Только не пойму - зачем цикл? Сразу забрать диапазон в массив быстрее и проще.
P.S. У вас на строку
Код
ActiveSheet.Range("$A$1:$A$7").AutoFilter Field:=1, Criteria1:=iArray(), Operator:=xlFilterValues
дебагер не ругается?
 
Если
Option Base 1 ' нумерация элементов начинается с 1
то
ReDim iArray(1 To [Коллекция].Count)

Operator:=xlFilterValues в Excel2003 нет
 
Да ... а как забрать сразу диапазон в массив?
А дебагер не ругается ... я пока с ним не познакомился :) каюсь.
Спокойствие - величайшее проявление силы.
 
Код
Dim iArray()
iArray = [Коллекция].Value
 
Dim iArray()
iArray = [Коллекция].Value

Так не работает ... только первый элемент попадает в фильтр.

ПС: а как этим ... дебагером пользоваться?
Спокойствие - величайшее проявление силы.
 
Цитата
Werty пишет:
Так не работает ... только первый элемент попадает в фильтр.
Работает - я ведь проверил: в массиве 6 элементов.
 
Вот файл. Посмотрите, пожалуйста ...
Спокойствие - величайшее проявление силы.
 
Ну вот зачем дублировать файлы? Посмотрел - в массиве шесть элементов. Показать скрин?
 
Сори за дубли. Я когда запускаю макрос, то в итоге фильтр отображает только букву "А".
Спокойствие - величайшее проявление силы.
 
Вот скрин: в массиве 6 элементов.
Повторюсь: у меня ругается на вышеуказанную строку.
 
Я вот понял что версии разные Excel, в которых я тестирую макрос ... В 2003 только цифра 6 выводится, а в 2007 все буквы, но без цифры 6.
Да и ошибка возникает в 2003 офисе на Operator:=xlFilterValues ... что делать?
Спокойствие - величайшее проявление силы.
 
Если к букве добавить цифру, то эта буква с цифрой тоже не попадает в фильтр. Может мне надо идти спать уже ...
Спокойствие - величайшее проявление силы.
 
Попробуйте рекордером записать установку фильтра в 2003 и посмотрите что получится.
 
в 2007 получилось:
ActiveSheet.Range("$A$1:$A$11").AutoFilter Field:=1, Criteria1:=Array("6", "À", "Á", "Â", "Ã", "Ä"), Operator:=xlFilterValues
Спокойствие - величайшее проявление силы.
 
Отбор несколько значений появилось только в 2007 офисе, а в 2003 его нет.
А вот вышеуказанная строчка корректно выводит автофильтр, т.е. цифра 6 отображается в автофильтре.
Спокойствие - величайшее проявление силы.
 
Юрий М! Вы со мной до поздней ночи :) Спасибо Вам :)

Хотелось Вас лично поздравить с 23 февраля! С Днём Защитника Отечества! И пожелать всего чего Вы хотите! Также здоровья и кавказского долголетия Вам!



ПС: надо идти спать, завтра на работу.
Если что - пишите пожалуйста, я обязательно прочитаю и скажу спасибо :)
Спокойствие - величайшее проявление силы.
 
Спасибо за поздравление! И Вас с праздником!
 
В 2003 нет возможности в автофильтре выбрать несколько значений, а 2007 это умеет.
 
Для excel 2007+
Код
Sub Test()
  Dim a()
  a() = WorksheetFunction.Transpose([Коллекция&""])
  Лист1.Range("A1:A7").AutoFilter Field:=1, Criteria1:=a(), Operator:=xlFilterValues
End Sub
 
В 2003 можно сделать Расширенным фильтром:
Код
Sub AdvFilter()
Dim rCrit As Range
Set rCrit = Union([Коллекция], [коллекция!A1])
rCrit(1) = [A1] 'копирование заголовка
Range("A1", Cells(Rows.Count, 1).End(xlUp)).AdvancedFilter xlFilterInPlace, rCrit
End Sub
 
Здравствуйте!

Спасибо за ответы, буду изучать :)

Если рассматривать мой макрос, то нужно было в цикле переводить всё в текст, тогда всё работает: CStr([Коллекция].Cells(s))

С уважением,
ПАХОМ.
Спокойствие - величайшее проявление силы.
 
Вы невнимательны - Владимир уже всё перевёл в текст, и без всякого цикла :)
 
Я видел  :)  Но я же не мог оставить свой пример без ответа  :)
Спокойствие - величайшее проявление силы.
 
Маленький вопрос ... почему добавляются две кавычки внутри массива (т.е. [Коллекция&""]  ;)  , а не [Коллекция&]&""? То что к [Коллекция] добавляется знак & я так понял означает краткий тип, т.е. & означает тип Long. А вот эти кавычки ... зачем они?
Хотя думаю что это не объявление переменной (она же уже есть), а просто знак соединения ... только как вот
это обрабатывает Excel?
Изменено: Werty - 25.02.2013 21:00:43
Спокойствие - величайшее проявление силы.
 
Я думаю Владимир объяснит точно и подробно, я же на уровне ощущений (сам первый раз столкнулся) понимаю,  что это используется evaluate и перевод значений  в строку конкатенацией к значению пустой строки.
Страницы: 1 2 След.
Наверх