Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 25.12.2014
Сообщений: 14

Структурированый код в VBA

26.12.2014, 21:59. Показов 4032. Ответов 58
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, проблема собственно в том, что я не знаю, как правильно писать структурировано код в VBA?
Чтобы было проще читать и глазу приятнее
P.S Заранее спасибо
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.12.2014, 21:59
Ответы с готовыми решениями:

Слишком длинный типовой код в UserForm VBA. Как сократить код?
Программа выдает ошибку о слишком длинном коде. 1. Есть форма, в форме Multipage с 30 вкладками, на каждой вкладке 20 кнопок. 2. Тексты...

Вставить в код VBA код на другом языке
Доброго времени суток, форумчане! Скажите пожалуйста, как в при написании кода VBA, в него вставить участок кода на другом языке, допустим...

Код VBA
Пишу семестровую работу по vba, необходимо сделать тест, в процессе выдаёт ошибку(скрин 1) , ошибку выдаёт в объявлении переменных(скрин...

58
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
28.12.2014, 09:33
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Да вообще дурной тон эти типы объявлять!
Что за глупый совет?
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.12.2014, 11:07
Цитата Сообщение от The trick Посмотреть сообщение
Что за глупый совет?
В его случае нормальный
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Я вон на VBS последние три месяца руку набиваю — так без всяких объявлений всё отлично работает.
Вообще-то VBScript имеет только один тип данных, который называется Variant, так что да, объявлять не надо.
0
0 / 0 / 0
Регистрация: 25.12.2014
Сообщений: 14
28.12.2014, 11:30  [ТС]
А как тогда пправильно должно быть? По заданию
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
28.12.2014, 11:37
Цитата Сообщение от Pro_grammer Посмотреть сообщение
В его случае нормальный
В VBA? Нет.
Цитата Сообщение от Pudgemann Посмотреть сообщение
А как тогда правильно?
Объявлять всегда.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Вообще-то VBScript имеет только один тип данных, который называется Variant, так что да, объявлять не надо.
Это может вызвать проблемы с областью видимости. Объявлять надо всегда - это считается хорошим тоном.
1
 Аватар для Апострофф
9912 / 3933 / 743
Регистрация: 11.10.2011
Сообщений: 5,916
28.12.2014, 11:41
Цитата Сообщение от Pudgemann Посмотреть сообщение
А как тогда пправильно должно быть?
https://www.cyberforum.ru/post7045204.html
Visual Basic
1
Dim r1 As Single, r2 As Single, r3 As Single'так будет правильно
Структурированый код в VBA
Во первых - Pi<>3.14
Во вторых - msgbox sqr(2)^2=2,,"Квадрат корня квадратного из двух не равен двум"
2
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.12.2014, 12:01
Цитата Сообщение от The trick Посмотреть сообщение
Объявлять надо всегда - это считается хорошим тоном.
Я считаю, что объявлять переменные в VBS нужно только тогда, когда это действительно необходимо, например если в скрипте есть разные области видимости. В остальных случаях это приводит только к увеличению размера кода и реально ни как не влияет на его качество и скорость выполнения.
1
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
28.12.2014, 12:10
Цитата Сообщение от Pro_grammer Посмотреть сообщение
так что да, объявлять не надо.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Я считаю, что объявлять переменные в VBS нужно только тогда, когда это действительно необходимо
?
Объявление переменных уменьшает число возможных ошибок например с той же областью видимости. Также при объявлении переменных легче будет переносить код например в VB6 или VBA. Насчет размера не думаю что он сильно растянется из-за объявлений, тем более если это Variant и его не нужно писать.
1
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
28.12.2014, 12:28
Цитата Сообщение от The trick Посмотреть сообщение
Объявлять всегда.
Тема перестала быть понятной для её зачинателя.

Это как если бы ребёнок спросил как держать руль, а ему сразу о том, как пройти поворот в дрифте!

Иногда тип затуманивает логику, особенно при разработке логики проекта*; а ведь в рамках вуза чуть ли не первое, что человек пишет в будущей программе, это объявление данных! Это прекрасно, но своеобразный спотыкач: иногда сутки тратишь на отладку только из-за этого.

Пример (когда объявление массива как Variant, т. е. без указания типа, сильно ускорило всю работу): Вывод массива в строку

________________________
* не считая те (исключительно редкие даже здесь, на форуме) случаи, когда автор чётко объясняет:
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
а для чего он задал именно такой тип своим данным
Но этого же нет!
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
28.12.2014, 12:32
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Это как если бы ребёнок спросил как держать руль, а ему сразу о том, как пройти поворот в дрифте!
Нет. В любом ЯП практически первым делом знакомятся с типами данных. Это основа.
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Иногда тип затуманивает логику, особенно при разработке проекта; а ведь в рамках вуза чуть ли не первое, что человек пишет в будущей программе, это объявление данных! Это прекрасно, но своеобразный спотыкач: иногда сутки тратишь на отладку только из-за этого.
Никогда объявление типа не может затуманить логику, наоборот - да.
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Пример (когда объявление массива как Variant, т. е. без указания типа, сильно ускорило всю работу): Вывод массива в строку!
Variant - тоже тип, но его не следует вставлять везде. Где это удобно, там и нужно, в других случаях это может породить проблемы, но не всегда и везде пользоваться только Variant'ом.
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
28.12.2014, 12:44
Мы оба правы. Но вы канонизируете, а я основываюсь именно на "учебно-производственной" практике.

Как на духу отвечу: только отсутствие типа даёт возможность настроить InputBox (чтоб и Отмена в нём работала).

Стандартный же подход по Отмене приводит (испытателя кода) к "руготне" с отладчиком. И это плохо.
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
28.12.2014, 13:01
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
отсутствие типа
Цитата Сообщение от The trick Посмотреть сообщение
Variant - тоже тип
Цитата Сообщение от The trick Посмотреть сообщение
Где это удобно, там и нужно
Я могу также сказать что Variant переменные в VBA без библиотеки типов не могут содержать UDT, работа с ними очень медленная чем напрямую с нужным типом, они "кушают" кроме времени еще и память, с ними очень легко наделать ошибок, они очень долгие при передачи параметров в функции и т.д. и т.п.
1
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
28.12.2014, 13:06
Цитата Сообщение от The trick Посмотреть сообщение
при объявлении переменных легче будет переносить код например в VB6 или VBA
Совершенно верно! Но только без их типов (VBS, как уже отметили, к ним равнодушен).

Вот очень характерный учебный пример, где "мой приём" позволяет просто и удобно вывести матрицу, а также избежать переполнения в произведении: Найти произведение всех отрицательных чисел над побочной диагональю.

И конечно
Visual Basic
1
Option Explicit
всегда рулит!
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
28.12.2014, 13:11
только отсутствие типа даёт возможность настроить InputBox
InputBox это текстовой бокс и отлично работает с переменной объявленной As String
Без всякой ругани
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
28.12.2014, 13:12
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
... Я вон на VBS последние три месяца руку набиваю — так без всяких объявлений всё отлично работает...
Это потому, что Вам пока не встречались ситуации, в которых объявление переменных является необходимостью. Пара простых примеров:
Visual Basic
1
2
3
4
'Dim x(2)
ReDim x(3)
WScript.Echo UBound(x)
WScript.Quit 0
Visual Basic
1
2
3
4
5
6
7
8
x = 10
WScript.Echo "x = " & x & vbNewLine & "ABC() = " & ABC
WScript.Quit 0
 
Function ABC()
'Dim x
ABC = x + 1
End Function
Запустите сценарии на исполнение сначала в исходном виде, а затем после удаления символа комментария у "закомментированных" операторов.
1
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
28.12.2014, 13:14
Другое дело, что проще не делать преобразование типов и не объявлять дополнительную переменную
1
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
28.12.2014, 13:14
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Но только без их типов.
Нет. Там речь шла об объявлениях переменных в VBS, а не о типах. Во-вторых все те недостатки и достоинства Variant'ов также переносятся на VB6. А если портировать код например на C++, то это будет большой проблемой без типов.
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
28.12.2014, 13:28
Цитата Сообщение от Dmitrii Посмотреть сообщение
Вам пока не встречались ситуации
Dmitrii, действительно не встречались.

Замечательный принцип
Цитата Сообщение от The trick Посмотреть сообщение
Объявлять всегда.
Но только если осознанно и правильно. А не на автомате (как это у ТС и прочих новобранцев).

Посему я склоняю[сь] к такому отношению:
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Цитата Сообщение от The trick Посмотреть сообщение
Что за глупый совет?
В его случае нормальный
А так да. Мой "метод" чисто дидактический (о подаче материала порциями).

Добавлено через 4 минуты
Цитата Сообщение от Alex77755 Посмотреть сообщение
InputBox это текстовой бокс и отлично работает с переменной объявленной As String
Alex77755, ну куча же тем, где в инпутбокс сразу начинают пихать числа, и Отмена не работает (или тупо даёт 0).
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
28.12.2014, 15:27
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
... Но только если осознанно и правильно. А не на автомате (как это у ТС и прочих новобранцев)...
Упомянутый "автомат" - это навык, который может сформироваться лишь при постоянном (!) упражнении в "осознанном и правильном" оформлении исходного кода, а не при следовании принципу "здесь объявлю переменные, а там - не буду, потому как, вроде бы, не рационально".

Не по теме:


Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
... Мой "метод" чисто дидактический (о подаче материала порциями)...
Понятие "дидактика" относится к понятию "подача материала порциями" примерно также, как понятие "океан" к понятию "одно из океанских течений".

0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
28.12.2014, 15:50
Цитата Сообщение от Dmitrii Посмотреть сообщение
Упомянутый "автомат" - это навык...
Вот то-то и есть "подсознанка"!

Привитие сего "навыка" и оборачивается простым приписыванием As … (часто лишь в конце).

И когда программа срабатывает, то то, что это было сделано бездумно, так и не обнаруживается.

Добавлено через 13 минут

Не по теме:

Цитата Сообщение от Dmitrii Посмотреть сообщение
как понятие "океан" к понятию "одно из океанских течений"
Да уж, увлекло меня это вновь образованное дидактическое течение! А всю дидактику я и не беру.

0
28.12.2014, 16:59

Не по теме:

Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Вот то-то и есть "подсознанка"...
Какая такая "подсознанка"? Ещё до написания исходного кода программист должен спроектировать программу. В этом проекте уже максимально полно должен быть предусмотрен и набор переменных, типизация которых определяется вовсе не наобум, а на основании логики алгоритма и предполагаемого диапазона значений. Сделать это можно лишь сознательно.
В своё время нам в институте читали отдельный курс "Технология проектирования программ". При этом программирование не было нашей основной специализацией.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.12.2014, 16:59

Код в VBA в эксель
Подскажите, что я сделала не так. Мне необходимо вставить данные с позиции (1,10) на лист &quot;Копия6&quot; Sheets.Add...

Штрих-код в VBA
Здравствуйте. Есть список инвентарных номеров в колонке &quot;А&quot;, также рядом в колонке &quot;B&quot; идет список наименования. Помогите вывести...

Код с VBA на Delphi
Подскажите можно следующий VBA переделать на Delphi Dim c As Range For Each c In Columns ComboBox1.AddItem...

Портировать код из C++ в VBA
float f(float x) { float y; y = (pow((1-x),5)*exp(x*sin(x))); if (x=0) {y=0;} return y; .....//тут ввод данных ...

Переведите в код VBA
Не знаю vba,но нужно получить вот такой алгоритм.Кто может помочь? const n=5;m=7; //Объявление констант-размеров массива var...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru