Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2019, 20:23   #1
НеВа6464
Пользователь
 
Регистрация: 16.05.2009
Сообщений: 64
По умолчанию Как увязать тип данных в ячейке Эксел с типом данных в переменной VBA?

Здравствуйте!
Имею колонку шестизначных артикулов с форматом числа 000000.
Т.е. есть артикулы с лидирующими нулями.

810625
315426
003344
012506
315426
810625

Средствами VBA я формирую массив неповторяющихся артикулов из этой колонки, а затем делаю выборку по каждому из артикулов.
Фильтрую вот так:

Код:
art_massiv = massiv_art(i)
Selection.AutoFilter Field:=3, Criteria1:=art_massiv
Так вот, переменная "art_massiv" отбрасывает лидирующие нули и фильтр не срабатывает. Т.е. 3344 не равно 003344 с точки зрения фильтра.
Пока я эту проблему решаю так: в начале кода форматирую колонку артикулов так, чтобы не было лидирующих нулей, а в конце кода опять возвращаю формат 000000.
Но чешется мозг насчёт того, как бы изнасиловать переменную "art_massiv", чтобы этого не надо было делать.
Ну и по касательной, второй вопрос.
Задав переменной "art_massiv" тип as Integer я получаю ошибку - overflow при присвоении значения этой переменной. А это всего лишь шестизначное целое число.
Как так?
Пришлось отказаться от определения этой переменной. И всё работает, если не считать косяка с фильтром.
Офис 2003.
Спасибо!
НеВа6464 вне форума Ответить с цитированием
Старый 31.10.2019, 20:33   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от НеВа6464 Посмотреть сообщение
Задав переменной "art_massiv" тип as Integer
а если задать тип массива As String это не решит проблему?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.10.2019, 21:24   #3
НеВа6464
Пользователь
 
Регистрация: 16.05.2009
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а если задать тип массива As String это не решит проблему?!
так у меня в колонке числа и хотелось бы, чтобы они числами и оставались
НеВа6464 вне форума Ответить с цитированием
Старый 31.10.2019, 21:45   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Хочу чтоб были числа, но не числа
Хотя они и изначально не числа - сами ведь писали что там
Цитата:
Сообщение от НеВа6464 Посмотреть сообщение
колонку шестизначных артикулов
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 31.10.2019, 21:51   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

возможно я Вас сильно огорчу но Integer это целые числа от -32768 до +32767
Цитата:
А это всего лишь шестизначное целое число.
Как так?
а вот так повелось с деда-прадеда. изучайте матчасть, все написано

обьявите массив без типа. смелее экспериментируйте - все получится.
удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 31.10.2019, 23:09   #6
НеВа6464
Пользователь
 
Регистрация: 16.05.2009
Сообщений: 64
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
возможно я Вас сильно огорчу но Integer это целые числа от -32768 до +32767

обьявите массив без типа.
Буду знать, спасибо.
Видимо я что-то неправильно понял читая справку про Integer в VBA, где написано буквально следующее:
Содержит 32-разрядные (4-байтовые) целые числа со знаком в диапазоне от -2 147 483 648 до 2 147 483 647.

Массив я, естественно, объявил без типа. О чём и написано в топикстартере.
НеВа6464 вне форума Ответить с цитированием
Старый 31.10.2019, 23:17   #7
НеВа6464
Пользователь
 
Регистрация: 16.05.2009
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Хочу чтоб были числа, но не числа
Хотя они и изначально не числа - сами ведь писали что там
Это данные всего лишь названы артикулами. Но они состоят только из цифр и представляют из себя именно число в ячейке, которое отформатировано Экселем как шестизначное. Их можно складывать, вычитать и даже брать кубические корни, как с любым числом. Но вот на этом примере я сделал открытие, что если одно и тоже ЧИСЛО представлено в разных форматах, то фильтр не считает их одинаковыми настолько, чтобы делать по нему выборку.
И вот я задался вопросом, а можно ли переменную в ВБА представить шестизначным числом, даже если она, по сути, двух или трёхзначная.
НеВа6464 вне форума Ответить с цитированием
Старый 31.10.2019, 23:42   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от НеВа6464 Посмотреть сообщение
представляют из себя именно число в ячейке, которое отформатировано Экселем как шестизначное
- т.е. на самом деле в ячейке обычное число, возможно даже и одна цифра. Тогда как вариант (если нужно именно то, что видите на листе) - считывать из ячейки не .value, а .text, но нужно позаботиться чтоб не взять случайно именно то, что бывает видно в ячейке когда Эксель не может отобразить значение, т.е. #####
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 01.11.2019, 14:06   #9
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

Цитата:
Сообщение от НеВа6464 Посмотреть сообщение
И вот я задался вопросом, а можно ли переменную в ВБА представить шестизначным числом, даже если она, по сути, двух или трёхзначная.
в VBA есть такая шутка как FORMAT() через нее можно в строков виде отформатировать число как Вам необходимо для отображения/вывода. Но это будет текст, чтобы производить с ним какие-то арифметические операции нужно привести опять в число Cint() выполнить все что нужно и вернуть опять в текст через формат.

Последний раз редактировалось unbanned; 01.11.2019 в 14:18.
unbanned вне форума Ответить с цитированием
Старый 01.11.2019, 16:41   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Зачем вообще производить какие-то арифметические действия с артикулами? Они прекрасно могут так и жить в текстовом виде.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с типом данных JIexa0 Общие вопросы C/C++ 7 22.03.2018 13:52
Макрос для переноса (с удалением) данных с одного листа на другой при появлении дополнительных данных в ячейке - MS Excel Тохес Microsoft Office Excel 2 15.03.2016 22:26
Проблема с типом данных!!!!! Екатерина_21 C++ Builder 1 02.02.2012 02:19
Проблема с типом данных BMWSauber Общие вопросы .NET 1 12.10.2010 13:42
Макрос в эксел или PHP обработчик данных для формата .xls panashka Microsoft Office Excel 2 02.11.2009 15:56