Страницы: Пред. 1 2 3
RSS
MultiProcessing или хакерский менеджер процессов на VBA, Воскрешение (вторая жизнь) VBA
 
Цитата
testuser написал:
просто в целях показать, как правильно надо кодить для молодежи! )
А вообще я только недавно начал кодить на C, так что те у кого есть чувство юмора поймут )
Цитата
MultiZeus написал:
ИИ крут, но для VBA это проблема, т.к. мало в сети интернет технических моментов, связанных с данным языком и ИИ пытается наложить концепции из других языков на данный и получается то, что получается!
То что на VBA мало кода для каких-то сложных вещей, это один момент, и вполне понятный, поскольку основное назначение во много определсяет судьбу языка и итоговую содержание контента с ним связанного, которым в конечном итоге заполнен интернет, и который вобрали в себя LLM-ки. Другой момент, что в VBA много неочевидных моментов, таких, что без явного указания ByVal, аргумент передается ByRef, что при считывании файла в строку стандартными средствами он обязательно будет преобразован из Ansi в Unicod (хотя это не всегда нужно) и т.д. Третий момент, тот, что в VBA банально мало стандартного набора функций для работы с теми же строками и др. вещами. Можно, наверное, сказать так, что в VBA не хватает многих кирпичиков, подобных тем, что есть во многих современных языках и позволяют в них писать код более лаконично и понятно. Именно с целью, хотябы частично закрыть некоторые пробелы, я принялся писать свою библиотеку, которая в дальнейшем должна помочь мне и может быть кому-то еще писать многие вещи более правильно и без обилия "бойлеров".
Изменено: testuser - 13.12.2025 11:48:06
 
testuser, своя библиотека с хорошо продуманной реализация дело не простое (строки в т.ч.), потом поделитесь успехами. Внешний API будет?
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Внешний API будет?
Для начала это выглядит (уже так выглядит) просто как расширение стандартной VBE7.dll = "простой" набор плоских функций.., ну можно к ним будет еще добавить свою реализацию Словаря. Но...
Цитата
bedvit написал:
хорошо продуманной реализация дело не простое
Я скажу больше, реализовать полностью, то, что я хотел бы для меня представляется почти не возможным, учитывая нехватку времени, профессионализма, мотивации, смены настроения и т.д. Обясню на простом примере. Есть прекрасная функция InStr которая очень быстрая, но мне не нравится в ней один момент - у нее параметры реализованы через Variant
Код
         VARIANT _stdcall InStr(
                        [in, optional] VARIANT* Start, 
                        [in, optional] VARIANT* String1, 
                        [in, optional] VARIANT* String2, 
                        [in, optional, defaultvalue(0),
          custom(270D72B0-FFB8-11CF-A4BD-00A0C90F26EE, 1)

Это какбы не очень хорошо, но с этим я могу смириться.. У этой функции есть "сестра" InStrB, такая же прекрасная, предназначенная для Строк Ansi. Это прекрасно, но я решаю, что мне не хватает у функций InStr 5го параметра - длины участка строки, на котором функция должна искать подстроку. Я делаю реализация и называю ее InStrLen, что выглядит также лаконично и понятно. Также я делаю реализацию InStrEnd, которую по названию также понятно, что это за функция. Потом я хочу еще сделать реализацию InStr для байтовых массивов и также даю ей понятное название InStrByt. Дальше по накатанной InStrLenByt, InStrEndByt, .. дальше InStrRevLenByt - тут уже как-то не лаконично и не запоминающееся, уже какая-то ерунда начинается. Фактически возникает такая ситуация, назовем ее нейминг-хелл, когда запас простых понятных и вто же время кратких имен начинает исчерпываться. Конечно это одна из основных причин, почему было придумано OOP, поскольку оно решает эту проблемму - создаем класс строки и для нее методы Find, FindB, FindRev и т.д., потом создаем класс байтового массива и для просто создаем интерфейсы с теми же самыми именами. Но я не хочу создавать конечно же кучу COM-классов для всего на свете, это не тот путь который мне нравится. Тут мы подходим к финальной стадии, того, что я хотел бы создать - трейты (по аналогии с трейтами в языке Rust). Трейты - это такие штуки, которые бы позволили добавлять свои "интерфейсы" для всего на свете. Но как их реализовать на VBA? Для этого нужно, во-первых, создать дополнительный вспомогательный текстоый редактор для VBA, в котором можно создавать эти трейты и использовать, а из него уже текст должен будет раскладываться в стандартный VBA-код и попадать в оригинальный редактор VBA. Вот, собственно, такая, относительно простая мысль, но не так уж простая в реализации.
Изменено: testuser - 13.12.2025 14:51:59
 
Можно конечно пойти более простым путем, понаделать com-классов, для строк, допустим StingHelper и в нем много ручек FindLen, FindEnd, FindRevB и т.д. и то же самое для байтовых массивов, для массивов Integer.. В принципе-то конечно тоже вариант.
 
Вот, кстати, я уже давно слежу за проектом Twin Basic, но давно туда не заходил, а сейчас открыл "features" и прям офигел, там как раз это уже есть - легкие классы-структуры как в C++. Это не трейты, о которых я псал, но это может быть их альтернативной - можно делать класс строк и приделывать к нему множество ручек, причем там поддержка приватных полей - полная красота - так мог бы выглядеть современный VBA.
Изменено: testuser - 14.12.2025 09:19:23
 
Пик эволюции VBA кода достигнут, хотя просил улучшить небольшой макрос поиск по выпадающим спискам
Скрытый текст
Изменено: Тимофеев - 22.12.2025 10:16:45
 
Тимофеев, такими темпами и спутники запускать начнёте!
Ну а если серьёзно, то смысл какой? Складывается впечатление, что купили подписку на нейронку и теперь радуетесь, спамя ответы от этой нейронки. Зачем? Пропаганда того, что нейронки несут чушь?
Изменено: Senaki - 23.12.2025 07:17:03
 
Уважаемый Senaki! Нейронки дают направление - не всегда несут чушь - исправляя у себя же ошибки по чуть-чуть учатся одновременно (возможно). От них можно добиться приемлемого результата - но на это можно потратить конечно много времени.
Я устал читать по ВПР или суммесли на форуме.
Давайте что-то обсуждать и дописывать с помощью нейронки что-то интересное - заодно и больше примеров откуда взять правильный вариант у нейронки будет в процессе диалога.
В 45 посте про Autocad например недоработанная версия - интересна не всем - но может быть полезна кому-то.
Давайте например доработаем связку со Смета.ру через Excel - тоже навряд ли всем нужно, но на всякий случай болванка начала
Примеру и куски кода могут быть использованы в качестве примера кому-то в создании чего-то своего.
В большинстве своём гуру кодинга свои наработки не показывают - им проще про впр ответить или ещё что-нибудь монотонное, повседневное, форумное, повторяющееся по пару раз в неделю с заменой яблоки на груши.
А вообще все меньше вопросов и меньше людей становится на форуме из наблюдений
Изменено: Тимофеев - 23.12.2025 09:42:59
 
Уважаемый Тимофеев! В Смета.xlsm исправьте модификаторы доступа у вызываемых функций (сделайте их Public) и замените Auto_Open из модуля на Workbook_Open! Это если хотите дорабатывать свой проект корректно!

Цитата
написал:
В большинстве своём гуру кодинга свои наработки не показывают
Как-раз таки показывают,  ведь гуру кодинга не сидят на форумах, а пилят свои проекты и решения (это по секрету)! Тот, кто говорит, что у него есть много проектов и все они уникальные, но знать о них никому не следует - это тот, у кого ничего и нет! Это реальность, которая неудобна для большинства!
Изменено: Senaki - 23.12.2025 12:23:09
Страницы: Пред. 1 2 3
Читают тему
Наверх