Ненастоящий программист

Вы знаете, а я вот своего рода тоже программист. Правда, плюшевый).

Давным-давно с самого детства изучал разные языки программирования, но так сложилось, что уже лет 20, наверное, на практике требуется только VBA – встроенный в Word, Excel, Corel Draw ну и т.п. Вот какая нужна прикладная задача – такую и решаю. Последнее время всё конечно на Excel.

Формулы Excel – они, конечно, очень массивный инструмент, но зачастую мал. Например, вместо того чтобы возится с формулами массива, и не забывать каждый раз Ctrl+Enter, быстрее накалякать простенький макрос, в котором полноценный For/Next. А как только нужно изобразить сколько-нибудь дружественный пользовательский интерфейс, а если еще и динамический – ну тут сразу пиши пропало.

И вот я собственно об Excel VBA. А конкретно - о его костылях. Прям слова другого нет. Бесят!  Итак, погнали:

Раз. Это гребаный десятичный разделитель в Excel. Все пользователи, конечно же, херачат Double в ячейке через запятую. Ну вот вообще всегда. И когда из-под VBA пишешь в ячейку – тоже запятая. Да, я знаю, как сменить разделитель, но чтобы одновременно в голове у всех пользователей – мдя. А разработчик-то американский, и поэтому на формах VBA разделитель конечно же точка. А теперь картина маслом: чтобы взять в переменную Double с листа – то просто равно, а если с формы – то через Val(). Я пробовал с листа брать через Val(), но пару раз получил Overflow, на ровном вообще месте, и завязал с этим. Просто приходится помнить, откуда ты берешь дробь.

Два. А есть вообще какой-нибудь механизм, который, как в нормальном языке, реализует глобальные переменные? Ну, то есть, наверное, и есть, но по факту проще сделать, чтобы каждая форма скидывала результаты куда-нибудь на лист. А следующая брала с листа. АААРРГГГХХХ!!!!!! Ну ведь это не настоящий язык программирования, да?

Три. А теперь адресация на листе. Вот представьте себе шахматную доску. Ну или поле в морской бой. По горизонтали у тебя буковки, по вертикали – циферки. Смотрим на лист – вуаля! А теперь давайте из-под VBA обратимся на лист. Способ раз – через Range. Что-нибудь типа Sheets(“Лист1”).Range(“A1”). Пока все хорошо, правда? Но это если ты знаешь куда обратиться, типа константа. А как в цикле перебирать ячейки? Не, ну я знал человека, который в цикле через ASCII таблицу перебирал символы и складывал в String, которой потом кормил Range… Ну чтож, мы все тут в Excel немножко не настоящие программисты. А теперь смотрим способ два – через Cells. Sheets(“Лист1”).Cells(x,y) – и вуаля, вот тут то и циклы поперли. Вот только ЧЕТЫРЕЖДЫБЛЯДСКАЯ ЯРОСТЬ!!!!!! Х - это строка, а Y это столбец. Почему, блять, тут-то наоборот??? Про ситуацию, когда сначала выбираешь диапазон Range, а потом к нему индексация Cells – я пока не буду, а то совсем ярость.

Четыре. Я, когда был еще почти настоящим программистом, привык, что индексация начинается с нуля. Любой массив тебе, любая куча, да хоть что – потому что индекс - это смещение, и для первого элемента оно очевидно нулевое. Ситуация первая – берем ComboBox, заполняем через AddItem, перебираем ListIndex – а он с нуля начинается. Красота. А тут мне потребовалось перебрать кучку таких ComboBox, а они с разными именами. Действия над ними одинаковые, а имена у них разные. Ну, напихал их в Collection, и что я вижу? Внутри Collection, какого то ХУЯ!!!!! Индексация с 1 начинается.

В общем, программисты бывают разные, в том числе не совсем настоящие. Но все равно всем бобра!

P.S. Не надо только мне доказывать что на 1С это было бы удобнее. Такой друг у меня уже есть!))

Вы смотрите срез комментариев. Показать все
2
Автор поста оценил этот комментарий
А просто не надо в цикле перебирать ячейки. Надо брать весь диапазон и загонять его в массив, работать с массивом, и после одним движением массив загонять в диапазон. А дергать ячейки каждый раз, да если еще и писать в них, такое себе.
раскрыть ветку (5)
Автор поста оценил этот комментарий

Интересная мысль, а зачем? Имеется "массив" на листе, зачем его перегонять еще куда то? Если вы про распределенный доступ, то у меня такого нет. Почему противопоказано дергать ячейками?

раскрыть ветку (4)
1
Автор поста оценил этот комментарий
Зачем? Чтобы быстро работать в памяти, а не читать и записывать каждый раз в лист, это постоянно "перерисовывает" его. Ну и опять же, это де вам неудобно работать с различной адресацией всякими буквами и пр., а тут понятный массив.
раскрыть ветку (3)
Автор поста оценил этот комментарий

Не понимаю применения термина "Быстро". У меня не графика, не нейросети и не кластерные вычисления. Большую часть выполнения кода - тупит устройство ввода (пользователь). На процессоре i5-i7 я мог бы перебирать поштучно тысячу ячеек, и все равно визуально тормоза не заметны были бы. А если вы про саму перерисовку, обновление листа средствами самого Экселя - так конечно, эту перерисовку при больших вычислениях отключаю.

раскрыть ветку (2)
0
Автор поста оценил этот комментарий
Быстро это как медленно, только наоборот ;) Опыт, он лучший учитель, попробуй сделать одно и тоже через ячнйки и через массив, выставь в коде таймеры и сравни результаты. Мне случалось исправлять код "плюшевого программиста", у жены на работе он чуть ли не вешал комп, дома на моем компе он выполнялся около 40(sic!) секунд, после исправления что-то типа 0.05 секунд. Файл там конечно был весьма большой, что-то искалось по строкам столбца и если находилось, писалось на отдельный лист что-то из соседних столбцов той строки или следующей чтоли строки, точно уже не помню.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Гм, может быть в этом что-нибудь и есть! Спасибо, попробую!

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества