Оформление кода vba excel

Начиная практиковаться в написании кода VBA, очень важно с самого начала выработать хорошие привычки в оформлении кода, чтобы в дальнейшем написанный код было легко читать и понимать, как он работает.

В процессе написания кода, программист может иметь совершенно чёткое представление о том, что за код он пишет и как этот код должен работать. Но нужно позаботиться и о том, чтобы, вернувшись к работе спустя полгода, не пришлось ломать голову, пытаясь понять, что должен делать этот код. Ещё более неприятная ситуация – когда кто-то другой станет продолжать Вашу работу над кодом и не сможет понять, как он работает.

Эта статья посвящена комментариям, отступам в коде и переносам строк – элементам, которые делают код аккуратным и понятным.

Содержание

  1. Комментарии в VBA
  2. Отступы в коде VBA
  3. Переносы строк в VBA

Комментарии в VBA

Самое важное для написания аккуратного и понятного кода – чаще оставлять комментарии. Комментарии – это строки в коде, которые исполняют роль заметок и помогают разобраться, какие действия выполняет та или иная часть кода.

Комментарии не участвуют в процессе выполнения программы и не влияют на результат работы макроса. Каждая строка, начинающаяся апострофом (‘), будет считаться в VBA комментарием. Редактор VBA в Excel выделит такую строку зелёным цветом шрифта, чтобы с первого взгляда было понятно, что это комментарий, который не будет выполняться.

Ниже продемонстрировано, как при помощи комментариев поясняется работа простой процедуры Sub:

' процедура Sub для просмотра диапазона ячеек A1-A100 активного
' листа  и поиска ячейки, содержащей переданную процедуре строку 

Sub Find_String(sFindText As String)

   Dim i As Integer   ' переменная типа Integer для цикла 'For'
   Dim iRowNumber As Integer   ' переменная типа Integer для хранения результата 

   iRowNumber = 0

   ' последовательно посматриваем ячейки A1-A100, пока не будет найдено значение 'sFindText'

   For i = 1 To 100
      If Cells(i, 1).Value = sFindText Then

         ' найдено совпадение с переданной строкой
         ' сохраняем номер текущей строки и выходим из цикла
         iRowNumber = i
         Exit For

      End If
   Next i

   ' сообщение во всплывающем окне сообщает пользователю,
   ' найдена ли строка, и если найдена – сообщает номер строки 

   If iRowNumber = 0 Then
      MsgBox "Строка " & sFindText & " не найдена"
   Else
      MsgBox "Строка " & sFindText & " найдена в ячейке A" & iRowNumber
   End If

End Sub

Не расстраивайтесь, если какую-то часть кода, показанного выше, не удалось понять – далее в учебнике мы рассмотрим эту тему подробнее. Цель приведённого примера – продемонстрировать, как при помощи комментариев поясняется каждый блок кода.

Часто программисты ленятся добавлять подробные комментарии к своему коду, но, поверьте, затраченные усилия оправдают себя с избытком! Несколько минут, потраченных на написание понятного комментария, могут сэкономить Вам долгие часы в будущем.

Отступы в коде VBA

Другой приём, делающий написанный код более читаемым – правильно расставлять отступы. В приведённом выше примере видно, что отступ сделан для кода внутри главной процедуры Sub и далее отступ увеличивается для каждого вложенного блока кода. Такие увеличенные отступы помогают понять, где каждый отдельный блок кода начинается и заканчивается.

Переносы строк в VBA

Ещё один способ сделать код более читаемым и облегчить работу с ним – делать переносы и разбивать одну длинную строку кода на несколько коротких. В VBA, чтобы разбить строку, нужно вставить символы » _» (пробел+подчёркивание) непосредственно перед переносом строки. Это сообщает компилятору VBA, что текущая строка кода продолжается на следующей строке.

Следующий пример демонстрирует, как при помощи переносов строк можно сделать длинные строки кода гораздо более понятными и легко читаемыми.

Посмотрите на этот оператор If:

If (index = 1 And sColor1 = "красный") Or (index = 2 And sColor1 = "синий") Or (index = 3 And sColor1 = "зеленый") Or (index = 4 And sColor1 = "коричневый") Then

При помощи переносов строк тот же оператор If может быть записан вот так:

If (index = 1 And sColor1 = "красный") Or _
   (index = 2 And sColor1 = "синий") Or _
   (index = 3 And sColor1 = "зеленый") Or _
   (index = 4 And sColor1 = "коричневый") Then

Если рассмотренный оператор If разбит на четыре строки, то составляющие его блоки c условиями видны гораздо более наглядно. Этот пример иллюстрирует, как аккуратное оформление может сделать код более читаемым и привести в результате к меньшему количеству ошибок и путаницы.

Оцените качество статьи. Нам важно ваше мнение:

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

При знакомстве с VBA возникают небольшие «блохи», отдельные темы для которых — роскошь.  
Если где-то есть явные ответы, отсылайте туда.  

   1. Оформление кода.  
Красиво и читаемо смотрится код с отступами. Есть же какие-то стандарты на оформление, ведь спец. программы могут расставлять отступы автоматически? Где об этом почерпнуть информацию?  

  2. Разделение кода.  
Например, в форме записана процедура, часть которой — обработка листа. Можно прописать все в одном макросе, а можно выделить часть, касающуюся листа, в отдельный макрос и поместить в общий модуль. Оправдано ли и как влияет на работу такое разделение?  

  3. Объявление переменных типа Public.  
В одном из модулей, потому что все на виду. Там, где больше используются. А если переменная используется кодами общих модулей, листов и форм? Т.е. из практики — где лучше размещать Public … As …?  

  4. Одна переменная для разных действий. Оправдано ли?  
В разных процедурах переменная Dim n. Понятно, что отработка одной процедуры никак не влияет на работу следующего макроса с такой же переменной. Но вопрос по открытым переменным. Например, при открытии книги производятся действия с последней строкой одного листа, далее с последней строкой другого листа. Можно использовать две переменные, но можно только одну Public RwsCnt -экономия памяти. Что скажут практики?

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Привет, Вить.  
1) Да есть программа 263 кб в раре(IndenterVBA.rar), могу кинуть в личку. Но поищи, на форуме уже выкладывали.  
2) Оправдано. на работу особо не влияет, но улучшает читаемость кода.  
3) Всегда размещай в общем модуле, тогда будет видна из всех модулей.  
4) Очень оправдано, экономим память. Например счетчик i можно использовать во всех циклах модуля, если они не вложены друг в друга.

Я сам — дурнее всякого примера! …

 

Igor67

Пользователь

Сообщений: 3729
Регистрация: 21.12.2012

vikttur, Вы как то пропустили тему, где писали кто что использует. Поискать надо, ссылку не сохранил.  
использую, по совету старших товарищей, MZTools — просто хорошая утилитка (добаление названий процедур, копирование контролов и пр.),IndenterVBA — отступы.  
2 а примеры от ZVI посмотрите. У него стандартные действия вынесены в функции или приватные процедуры с параметрами и просто обращаемся к ним когда надо. Да и вообще многие решения ZVI можно просто вставлять как часть решения:)  
3. Объявление переменных типа Public — в общем модуле. тогда они доступны из любой части проекта. (форма, модуль листа)  
4. можно запутаться, и так, как опыта мало можно получить ошибку или не ожидаемый результат по незнанию.  
Все выше сказанное только ИМХО, основанное на небольшом личном опыте.

 

1)

http://excelvba.ru/soft/VBE  

  2) На работу никак не влияет. Дело вкуса.  

  3) Чем меньше таких переменных — тем лучше (не запутаетесь).  
Я стараюсь передавать такие переменные в другие процедуры в качестве параметров.  

  4) Если мне надо сделать несколько макросов, в каждом из которых есть цикл, — в каждом из макросов я использую одну и ту же переменную i  
Поскольку видимость переменной ограничивается текущей процедурой, проблем не возникает.

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Спасибо.  
1. Дружно не поняли. Я спрашивал не о программе, а о стандартах или правилах написания кода.  
3. Сам плохо объяснил. Что лучше — все  Public в одном общем модуле или размещены в разных общих модулях?

 

1. Стандартов НЕТ.  
Каждый оформляет код так, как ему удобнее.  

  Есть что-то вроде общепринятого формата кода — это можно увидеть, применив программу IndenterVBA с настройками по умолчанию.  

  3. Лучше — в одном модуле, ИМХО.  
Ещё лучше — вообще не использовать такие объявления переменных.  

  В моих проектах (даже очень сложных) число глобальных переменных обычно равно 1 + число строк кода, делённое на 500.  
Т.е. в макросах до 500 строк кода обычно бывает максимум 1-2 глобальных переменных.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

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

Я сам — дурнее всякого примера! …

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

1. Всегда оформляй табулятором отступы тех блоков, которые имеют «начало» и «окончание»: For-Next, If-End if, With-End With… Вложения внутри них — аналогично.  
2. Иногда делаю разделение — может потребоваться вызов «разделённого» из другой процедуры. А тут и писать заново не нужно.  
3. Если гарантированно всё в одном модуле (форма, лист), то можно внутри. Если есть подозрение, что может потребоваться и в других — выноси сразу в стандартный модуль.  
4. Часто стал использовать (писать меньше :=)

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

{quote}{login=EducatedFool}{post}Ещё лучше — вообще не использовать такие объявления переменных. В моих проектах (даже очень сложных) число глобальных переменных обычно равно 1 + число строк кода, делённое на 500.  
Т.е. в макросах до 500 строк кода обычно бывает максимум 1-2 глобальных переменных.{/post}{/quote}  
В моем не очень сложном проекте таких 9 шт. Есть куда расти :)  
Чем плохи глобальные переменные, кроме аппетита?

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Выводы для себя.  
1. Стандартов нет, но ведь программы под это как-то пишутся? О табуляторе и не думал, пробелы вводил :)  
2. Делить на стандартные, законченные процедуры. На работу не влияет.  
3. В один модуль. Не услышал, чем плохи глобальные переменные. Пока с ними легче. Например, перменная введенного пароля используется в разных процедурах разных форм. Как вариант, можно записывать в ячейку. Но не думаю, что такой вариант лучше.  
4. Такое мнение было и до этого — внутри процедур не страшно, можно отследить, с глобальными лучше перестраховаться.  
Всем спасибо за науку.

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

добавлю пять копеек :)  

  стандарты кода появляются при большом объеме программ — vba на это не тянет. Более того, некоторые стандарты к нему неприменимы. Так как это интерперетируемый язык, то и код несколько отличается. в общем случае:  

  1. отступы — использую табулятор(tab/shift+tab) — большего и не надо  
2. повторяющиеся фрагменты оформлять процедурами/функциями.  
3. public переменные объявлять только в тех случаях, если это действительно необходимо.  
4. переменные называть мнемонически значимо, использовать соответственно. Допустимо использование переменных счетчиков цикла в разных циклах.  

  для vba:  

  1 -«-  
2 оформлять, но если подпирает время, то это первый кандидат на распределение(берем на себя функции компилятора)  
3 объявлять. Лучше в отдельном модуле — легче освежать в памяти, не создавая закладок..  
4 можно использовать для разных действий с учетом совпадения типов и частоты обращения.

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

 

Во многих учебниках авторы рекомендуют:  
«Чтобы избежать неверного ввода имени переменной или риска конфликтов имён в программе используйте инструкцию Option Explicit, обнаруживающую опечатки в именах  
переменных на стадии компиляции (до выполнения программы).»  
Лучше позволить VBA выругаться, сказать что он о Вас думает, но избежать большого скандала во_время_работы.  

  Для установки ‘Option Explicit’ в проекты по умолчанию:  
в редакторе VBA установить флажок ‘Require Variable Declare’ на вкладке ‘Editor’ диалога ‘Tools’->’Options…’ .

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

 

{quote}{login=слэн}{date=06.12.2010 09:56}{thema=}{post}  
стандарты кода появляются при большом объеме программ — vba на это не тянет. {/post}{/quote}  

  количество программ на vba просто огромно, не говоря о vb.

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

хорошо, разверну свою мысль :  

  при таком объеме программ(мы), когда индивидуальное ее создание становится неэффективным. Колеегиальное творчество начинает требовать упорядочивания — стандартов.  

  так согласны? :)

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Вот когда начнут в VBA стратегии с трехмерной графикой рисовать, тогда уж без коллектива никак. Придется стандарты писать. Если что, в стрелялках, в укромном уголке, где авторы, прошу помечать «автор мысли о стандартизации vikttur» :)  

  А Option Explicit давно уже с птичкой.

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

>>> vikttur: 4. Одна переменная для разных действий. Оправдано ли?  
>> KukLP: Очень оправдано, экономим память. Например счетчик i можно использовать во всех циклах модуля, если они не вложены друг в друга.  

  Я, вообще, последнее время «грешить» чем стал — использую переменную не только в цикле (как счетчик), но и внутри него  

  Sub io()  
Dim x ‘ Variant  
   For Each x In Sheets ‘ Object  
       x = x.UsedRange.Value ‘ Variant — массив (если не пустой лист)  
   Next ‘ А здесь все равно x примет следующий элемент коллекции, и станет опять Object  
End With

 

Igor67

Пользователь

Сообщений: 3729
Регистрация: 21.12.2012

2 nerv  
С Вами все понятно, Вы то знаете что делаете:)  
Но вот когда пишешь на форум — лучше все в отдельности:) Ведь на форуме большей частью учатся и не понимают нюансов. А потом в своих проектах будут удивляться неожиданному/ не расчетному выполнению программы.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

{quote}{login=nerv}{date=15.10.2011 10:44}{thema=}{post} все равно x примет следующий элемент коллекции, и станет опять Object{/post}{/quote}Но следует учитывать, что Excel требуется время для определения типа. В данном случае я бы использовал две переменных с разными типами.    
Согласен с Игорем: на Форум — особенно.

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

>>Но следует учитывать, что Excel требуется время для определения типа. В данном случае я бы использовал две переменных с разными типами.  

  Ок, Такой пример:  

  Sub io()  
Dim x As Object  
For Each x In Sheets  
Set x = x.UsedRange ‘ Думаю, тут время на определение типа не требуется, а размножать переменные, не всегда гуд. Хотя и Игорь, и Юрий, разумеется, правы.  
Next  
End sub

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

#22

15.10.2011 14:24:57

Саня, слушай старших. Даже для тебя такой подход чреват граблями, а если с ним придется работать другим? Ну сэкономил ты 12 байт(а верней совсем не сэкономил, экс все равно создаст два экземпляра переменных в памяти), стоит оно граблей?

Я сам — дурнее всякого примера! …

Оформление кода VBA

​Смотрите также​i_n = Worksheets(«Специалисты»).Cells(Rows.Count,​ не работает, сам​N = SRng.Rows.Count​Cheshir0067​ а что-то осваивать​: К сожалению не​End If aws.Rows(i).Delete​ что бы данные​excel_pl​

​ = 1 To​ ‘отключаем стандартное предупреждение​ печати цветных фотографий.»​ конце строки, если​ выдаёт ошибку. Очень​Ещё один способ сделать​ As Integer ‘​Начиная практиковаться в написании​ «A»).End(xlUp).Row​ сталкивался… это связано​Vs = SRng.Value​: Имхо всё не​ заново. В любом​ пойму, перед?​ ws.Cells(Rows.Count, 1).End(xlUp).Offset(1) End​ копировались на другие​: Вопрос решён.​ SearchRange.Cells.Count If SearchRange.Cells(i)​ о потере текста​ & vbLf &​ текс длинный и​ неудобно.​

​ код более читаемым​ переменная типа Integer​ кода VBA, очень​For i=1 to​ именно, что Вы​ReDim SArr(1 To​

Комментарии в VBA

​ так страшно:​ случае вам огромное​For i =​ If aws.Rows(i).Copy ws.Cells(Rows.Count,​ листы в зависимости​Всем спасибо.​ Like Condition Then​.Merge Across:=False ‘объединяем​ _ «Недостатки. В​ не помещается в​Мне желательно в​

​ и облегчить работу​ для цикла ‘For’​ важно с самого​ i_n​ пытаетесь вставить данные​ N)​Самое главное определиться​ спасибо за помощь!​ aws.Cells(Rows.Count, j)​ 1).End(xlUp).Offset(1) End If:​ от категории, например​zhmerin​ OutText = OutText​ ячейки​ большинстве случаев струйные​ одной строке?​

​ данной программе перенести​ с ним –​ Dim iRowNumber As​​ начала выработать хорошие​​ComboBox1.AddItem Worksheets(«Специалисты»).Cells(i, «A»).Value​

​ через Range, но​ReDim Arrr(N -​ с размером и​Burk​Burk​ Next​ вносим мы в​: Добрый день.​ & TextRange.Cells(i) &​Application.DisplayAlerts = True​ принтеры работают медленнее​что б было​ строки, где задаются​ делать переносы и​ Integer ‘ переменная​ привычки в оформлении​ComboBox2.AddItem Worksheets(«Специалисты»).Cells(i, «B»).Value​ Range, который на​ 1)​ шрифтом чтобы влазил​:​:​Burk​ таблицу тетрациклин, в​На форумах видел​ Delimeter Next i​.Item(1).Value = Mid(sMergeStr,​ (в страницах в​ понятнее: Private Sub​ данные (вторая строка)​ разбивать одну длинную​ типа Integer для​ кода, чтобы в​ ‘ если для​ другом, неактивном листе.​For R =​ в ячейку и​Lofak​Lofak​:​ разделе категория указываем​ много инфы и​ ‘выводим результаты без​ 1 + Len(sDELIM))​ минуту), чем лазерные​ Command2_Click() a =​ и переносить строки,​ строку кода на​

​ хранения результата iRowNumber​ дальнейшем написанный код​ столбцов «А» и​Roman777​ 1 To N​ задать конечное колличество​, понял, обращайтесь.​, НУ ЭТО УЖ​Lofak​ что он антибиотик,​ вариантов переноса строк,​

​ последнего разделителя MergeIf​ ‘добавляем к объед.ячейке​ принтеры, и требуют​ MsgBox(«Г‘òðóéГ*ûå ïðèГ*òåðû ГЇГҐГ·Г*ГІГ*ГѕГІ​ где If, там​ несколько коротких. В​ = 0 ‘​ было легко читать​ «B» данные лежат​:​

Отступы в коде VBA

​Sentence = Vs(R,​ символов (ограничение) для​combat​ КУ-КУ. Перед это​, ну, конечно, перед​ следовательно вся строка​ однако, всё попытки​ = Left(OutText, Len(OutText)​​ суммарный текст​​ регулярной замены картриджа​ ГІГҐГЄГ±ГІ ГЁ èçîáðГ*æåГ*ГЁГї,​ стоит AND и​ VBA, чтобы разбить​ последовательно посматриваем ячейки​ и понимать, как​ в одних и​combat​

Переносы строк в VBA

​ 1)​ показа в первой​: Всем доброго времени​ не внутрь строки​ копированием поставить чистку.​ переносится на лист​ заставляют VBA ругаться.​ — Len(Delimeter)) End​End With​ с чернилами», ,​ Г°Г*çáðûçãèâГ*Гї Г*Г* ГЎГіГ¬Г*ГЈГі​ у м меня​ строку, нужно вставить​ A1-A100, пока не​ он работает.​ тех же строках,​, кстати, вчера потом​

​SArr(R) = «​ ячейке.​ суток, помогите решить​ кода, а перед​ Только надо активировать​ 2, в антибиотики.​

​Нужно перенести часть​​ Function​​End Sub​

​ «Справка») End Sub​ ìåëêèå ГЄГ*ïëè Г·ГҐГ°Г*ГЁГ«.​ будет много «AND»​ символы » _»​ будет найдено значение​В процессе написания кода,​ иначе надо делать​ ток сообразил, что​ » & Replace(Sentence,​Пример берёт колличество​ задачу​

​ ней. Как мне​ страницу , на​​ Вносим витамин, переносится​​ кода, который выполняет​Сцепка происходит по​

​А как сделать​tarakano​ ÑòðóéГ*ûå ïðèГ*òåðû ïîïóëÿðГ*Г»​ и много «OR»​ (пробел+подчёркивание) непосредственно перед​ ‘sFindText’ For i​ программист может иметь​ второй цикл, как​ Ваш вариант тоже​ «»»», «»)​ символов из ячейки​прошелся по ветке​

​ кажется, перенос осуществляется​​ которую пойдёт запись,​​ на лист 3​ SQL запрос. Пробовал​ принципу:​ чтобы место пробела​: спасибо за оба​ ГЁГ§-Г§Г* îòГ*îñèòåëüГ*Г® Г*åâûñîêîé​ и хотел бы​ переносом строки. Это​ = 1 To​ совершенно чёткое представление​ вы делали выше.​ скорее всего рабочий,​

​ListBox1.AddItem R​ BB15 и разбрасывает​
​ www.excelworld.ru/forum/2-890-1 ничего для​
​ не AWS а​

​ либо проще ws.rows.delete​

office-guru.ru

Перенос строки в коде. Макросы

​ витамины.​​ как только можно,​
​Текст 1, Текст​ в строке​ способа, теперь буду​ öåГ*Г». Ñóùåñòâóåò Г¬Г*îæåñòâî​ каждое условие в​
​ сообщает компилятору VBA,​ 100 If Cells(i,​ о том, что​Next i​ просто Вы забыли​ListBox1.List(R — 1,​ по строкам.​ себя не взял,​ WS​ ведь ws у​Lofak​ но ничего не​ 2​Const sDELIM As​ знать​ ìîäåëåé ГІГ*ГЄГЁГµ ïðèГ*òåðîâ,​ отдельную строку записывать,​ что текущая строка​ 1).Value = sFindText​ за код он​RAN​ сказать, с какого​ 1) = Sentence​В Вашем примере​ все не то​WS.rows.delete For i​ вас лист, в​: Пример таблицы во​ выходит.​Вопрос​ String = «​Тогда еще один:​ âêëþ÷Г*Гї ìîäåëè, ñïåöèГ*ëüГ*Г®​ а не в​ кода продолжается на​ Then ‘ найдено​ пишет и как​: Мууученики!​ листа берёте ячейки:​Arrr(R — 1)​ надо заменить в​на моём примере,​

​ = aws.Cells(Rows.Count, j).End(xlUp).Row​​ который идет перенос?​ вложениях​
​Ниже пример запроса,​Как сделать чтобы​ » ‘символ-разделитель​Private Sub Command2_Click()​ ïðåäГ*Г*Г§Г*Г*Г·ГҐГ*Г*ûå äëÿ ГЇГҐГ·Г*ГІГЁ​

​ одну длинную. Public​​ следующей строке.​ совпадение с переданной​ этот код должен​200?’200px’:»+(this.scrollHeight+5)+’px’);»>With Worksheets(«Специалисты»)​200?’200px’:»+(this.scrollHeight+5)+’px’);»>ComboBox1.List = Worksheets(«Специалисты»).Range(«A1», Worksheets(«Специалисты»).Cells(Rows.Count,​

​ = R​​ Private Sub ListBox1_Change():​ и по моему​ To 2 Step​

​ Ну и его​​Прошу по возможности​ подскажите, как можно​ разделитель был не​вставлялся символ переноса​ Dim St as​ öâåòГ*ûõ ôîòîãðГ*ГґГЁГ©. ÍåäîñòГ*ГІГЄГЁ.​ Sub Delete_Privetik() Dim​Следующий пример демонстрирует, как​ строкой ‘ сохраняем​

​ работать. Но нужно​​ComboBox1.List = .Range(.Cells(1,»A»),​ «A»).End(xlUp)).Value​

planetaexcel.ru

Перенос длинных строк в редакторе кода

​Next​​200?’200px’:»+(this.scrollHeight+5)+’px’);»>​ шаблону как корректно​ -1​ надо поставить до​ помочь реализовать​ перенести строку? varSQL​
​ «, «, а​ строки?​ String St =​ Г‚ áîëüøèГ*Г±ГІГўГҐ ñëó÷Г*ГҐГў​ b As Range,​ при помощи переносов​ номер текущей строки​ позаботиться и о​ .Cells(.Rows.Count, «A»).End(xlUp)).Value​combat​Lbl_SI.Caption = «Всего​Worksheets(«РСИ»).Cells(3, 55) =​ переносить текст по​Lofak​ цикла по I​unick12345​ = «select codact,​ перенос текста на​anvg​ «Струйные принтеры печатают​ ñòðóéГ*ûå ïðèГ*òåðû Г°Г*áîòГ*ГѕГІ​ c As Range,​ строк можно сделать​ и выходим из​ том, чтобы, вернувшись​ComboBox2.List = .Range(.Cells(1,​: Роман, я не​ СИ в базе​

​ Lbl.Caption​​ строкам шаблона​: Да, я так​Lofak​: переносится или копироваться?​ codpro, ds1pro _​ следующую строчку?​: В Excel для​ текст и изображения,​ ìåäëåГ*Г*ГҐГҐ (Гў Г±ГІГ°Г*Г*ГЁГ¶Г*Гµ​ d As Range,​ длинные строки кода​ цикла iRowNumber =​ к работе спустя​ 2), .Cells(.Rows.Count, 2).End(xlUp)).Value​ сомневался, что Вы​ » & «​На:​в первых двух​ и имел ввиду,​: Вот так?​Lofak​ from fge50fmddk.gepro where​Т.е., чтобы сцепка​ Range можно использовать​ разбрызгивая на бумагу​ Гў ìèГ*ГіГІГі), Г·ГҐГ¬​ LastRow As Long,​ гораздо более понятными​ i Exit For​ полгода, не пришлось​

​End With​​ мне очередной раз​ » & N​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>​ строках применены формулы,​ но в таком​Sub Main() Dim​: Копироваться​ codact = ‘U20′»​ происходила по принципу:​ 2 типа символа-переноса​ мелкие» & vbNewLine​ Г«Г*çåðГ*ûå ïðèГ*òåðû, ГЁ​ r As Long​ и легко читаемыми.​ End If Next​ ломать голову, пытаясь​Roman777​ поможете, и еще​ & » ед.»​numb = Worksheets(«РСИ»).Cells(15,​ с «ручной» настройкой​ случае выпадает ошибка,​ i As Long,​Нашел скрипт, который​Андрей VG​

​Текст 1​​ строки vbLf и​ St = St​ òðåáóþò ðåãóëÿðГ*îé Г§Г*ìåГ*Г»​

​ On Error Resume​
​Посмотрите на этот оператор​ i ‘ сообщение​ понять, что должен​:​ раз вам большое​’ComboBox1.List = Worksheets(«Специалисты»).Range(«A1″,​ 54)’ Считаем колличество​ кол-ва символов (регулятор​ что переменная не​ j As Integer,​ выполняет необходимую мне​: Доброе время суток.​Текст 2​ vbNewLine​ + » капли​ ГЄГ*ðòðèäæГ* Г± Г·ГҐГ°Г*ГЁГ«Г*ìè»,​ Next Set b​If​ во всплывающем окне​ делать этот код.​RAN​ спасибо​ Cells(Rows.Count, «A»).End(xlUp)).Value​ символов к отображению​ первой строки)​ задана:​ ws As Worksheet,​ функцию, но при​VBA строково зависимый​Sanja​андрей​ чернил. Струйные принтеры​ ,»Г‘ГЇГ°Г*ГўГЄГ*») End Subтекс​ = Range(«g2:g2500»).Cells Set​:​ сообщает пользователю, ‘​

CyberForum.ru

Символ переноса в VBA

​ Ещё более неприятная​​, Вы правы…) Почему-то​
​работает только первый​’ComboBox2.List = Worksheets(«Специалисты»).Range(«B1»,​
​Worksheets("РСИ").Cells(15, 13).FormulaR1C1 =​
​в других строках​Burk​ aws As Worksheet,​
​ каждом запуске копирует​ язык, поэтому​
​: Function MergeIf(TextRange As​: Если vbLf или​
​ популярны из-за относительно​ в msgbox длинный​ c = Range("bi2:bi2500").Cells​If (index =​ найдена ли строка,​
​ ситуация – когда​
​ сразу в глаза​ вариант, при втором​
​ Cells(Rows.Count, "B").End(xlUp)).Value​ Left(Lbl.Caption, numb)' Записываем​ текст может уходить​:​
​ x As Range​
​ все строки, в​varSQL = "select​ Range, SearchRange As​
​ vbNewLine подставить в​ невысокой цены. Существует​
​ и не помещается​
​ On Error GoTo​ 1 And sColor1​ и если найдена​ кто-то другой станет​
​ не бросилось)​
​ дает ошибку на​

​End Sub​ numb символов с​ за границы диапазона​
​Lofak​ Set x =​ том числе те,​
​ codact, codpro, ds1pro»​ Range, Condition As​

​ макрос. то эти​​ » & vbNewLine​ в одну строку,​ 0 If b​ = «красный») Or​ – сообщает номер​

​ продолжать Вашу работу​​combat​ запуск формы 2​тот код который​ лева в первую​ объединённых ячеек​

​, я вам написал​​ Rows(1).Find(«Садовник», , ,​ которые уже скопировал​
​ _ & "from​ String) Dim i​

​ символы появляются в​​ St = St​

excelworld.ru

Перенос строки кода, используя нижнее подчеркивание

​ как разделить его​​ Is Nothing Then​ (index = 2​ строки If iRowNumber​ над кодом и​, Советую всё-таки, вопросы,​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Dim i As Variant​ отключен, в самом​ ячейку​
​при перемещении по​

​ ответ на вопрос​ xlWhole) If x​ ранее​

CyberForum.ru

Как сделать перенос строки с использованием VBA?

​ fge50fmddk.gepro where codact​​ As Long ‘если​ ячейках склеенных​ + «множество моделей​ на 2 -​ Exit Sub Else​ And sColor1 =​ = 0 Then​ не сможет понять,​ не относящиеся к​For i =​ конце​Worksheets(«РСИ»).Cells(17, 1) =​ листбоксу, если сдвинуть​ о чистке листа.​ Is Nothing Then​Sub Main() Dim​ = ‘U20′»​ диапазоны проверки и​Serge_007​ таких принтеров, включая​ 3 строки?​ LastRow = b.Rows.Count​ «синий») Or (index​ MsgBox «Строка «​ как он работает.​ самой теме создавать​ 1 To Worksheets(«Специалисты»).Cells(Rows.Count,​combat​ Right(Lbl.Caption, Len(Lbl.Caption) -​ форму видно как​ В вашем коде​ Exit Sub Else​ i As Long,​Как в VBA перейти​ склеивания не равны​: А если попробовать,​ модели, специально предназначенные​
​gaw​ LastRow = LastRow​
​ = 3 And​ & sFindText &​
​Эта статья посвящена комментариям,​
​ в отдельной теме.​ «A»).End(xlUp).Row​: Как заставить работать​ numb)’ Забираем оставшиеся​ распределяется текст в​
​ до оператора чистки​ j = x.Column​
​ j As Integer,​
​ на новую строку​

​ друг другу -​​ прежде чем писать?​ » & vbNewLine​: Private Sub Command2_Click()​ + b.Row -​ sColor1 = «зеленый»)​ » не найдена»​ отступам в коде​ Ибо правила…​ComboBox1.AddItem Worksheets(«Специалисты»).Cells(i, «A»).Value​ ComboBox на форме,​ символы во вторую​ первых двух строках​ надо установить значение​ Application.ScreenUpdating = False:​ ws As Worksheet,​ в TextBox? Например,​ выходим с ошибкой​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Const sDELIM As String​ St = St​ a = MsgBox(«Струйные​ 1 Application.ScreenUpdating =​ Or (index =​ Else MsgBox «Строка​ и переносам строк​А по вопросу,​Next i​

​ беря данные с​​ ячейку​ и как он​ объекта set WS​ Set aws =​ aws As Worksheet,​

​ в строке​​ If SearchRange.Count <>​ = vbLf​ + «для печати​​ принтеры печатают текст​​ False For r​
​ 4 And sColor1​ » & sFindText​​ – элементам, которые​​ я бы на​

​For i =​​ листа в книге,​combat​

​ не умещается в​​ = какой-то лист.​ Sheets(«Общая база») For​ x As Range​TextBox1.Text = «Максимальное​ TextRange.Count Then MergeIf​Андрей​

​ цветных фотографий.» &​​ и изображения, разбрызгивая​
​ = LastRow To​

planetaexcel.ru

Перенос строки кода в VBA

​ = «коричневый») Then​​ & » найдена​
​ делают код аккуратным​ Вашем месте поставил​ 1 To Worksheets(«Специалисты»).Cells(Rows.Count,​ а форма привязана​: Я пошел совсем​
​ других​Либо активировать НУЖНЫЙЛИСТ.ACTIVATE​ i = aws.Cells(Rows.Count,​ Set x =​ число = «​ = CVErr(xlErrRef) Exit​
​: СПАСИБО! Очень помогли!​ vbNewLine & vbNewLine​ на бумагу мелкие»​ b.Row Step -1​При помощи переносов строк​ в ячейке A»​ и понятным.​

​ название отдела напротив​​ «B»).End(xlUp).Row​
​ к др. листу,​ по другому пути,​
​как решить эту​ , потом Rows.delete​ j).End(xlUp).Row To 2​ Rows(1).Find(«Садовник», , ,​ & max &​

planetaexcel.ru

Перевод строки и возврат каретки в VBA

​ Function End If​abbat81​ St = St​ & vbNewLine &​
​ If Cells(r, b.Column).Value​ тот же оператор​ & iRowNumber End​Самое важное для написания​ каждого работника… А​ComboBox2.AddItem Worksheets(«Специалисты»).Cells(i, «B»).Value​
​ у меня по​ объединил строки нарисовал​ задачу без формул,​
​ и потом снова​ Step -1 If​

​ xlWhole) If x​​ » Минимальное число​
​ For i =​
​: Вопрос наверное очень​ + «Недостатки. В​ _ » капли​
​ = «14» And​If​
​ If End Sub​
​ аккуратного и понятного​

​ потом уже по​​Next i​ чему то не​ линии и вставил​

​ а макросами​​ перейти на лист​

​ aws.Cells(i, j) <>​​ Is Nothing Then​ = » &​
​ 1 To SearchRange.Cells.Count​ глупый, но раньше​ большинстве случаев струйные​ чернил. Струйные принтеры​ Cells(r, c.Column).Value =​может быть записан​

Перенос строк с условием

​Не расстраивайтесь, если какую-то​​ кода – чаще​ условию, при выборе​т.к. у меня​ работает​ label (подстрочный текст​Roman777​ AWS и далее​ «» Then On​ Exit Sub Else​ min​ If SearchRange.Cells(i) Like​ знал, давно не​ принтеры работают медленнее»​ популярны из-за относительно​ «15» Then Rows(r).Delete​ вот так:​ часть кода, показанного​ оставлять комментарии. Комментарии​ начальника (или любого​

​ выбор из двух​​пребывал по всякому,​ под эти линии)​
​:​ цикл​

​ Error Resume Next:​​ j = x.Column​

​нужно чтобы после​​ Condition Then If​
​ использовал — и​ & vbNewLine St​ невысокой цены. Существует​ Next r End​If (index =​ выше, не удалось​ – это строки​ работника отдела), сверять​
​ списков, код сделал​ работает только если​вставляемый текст из​combat​Lofak​ Set ws =​ Application.ScreenUpdating = False:​ «max» остальное было​ MergeIf <> Empty​ уже забыл как.​ = St +​ » & vbNewLine​ If​ 1 And sColor1​ понять – далее​ в коде, которые​ его отдел с​ вот так…​ активен лист с​ ячеек распределяется в​, добрый день!​, либо вычистите​ ThisWorkbook.Sheets(CStr(aws.Cells(i, j))) If​ Set aws =​ на второй строке…​ Then MergeIf =​Как перенести строку​ «(в страницах в​ & _ «множество​The_Prist​ = «красный») Or​ в учебнике мы​ исполняют роль заметок​ отделами всех остальных,​
​Roman777​ которого берутся данные,​ соответствии со свойствами​Честно, не знаю​все​ Err <> 0​ Sheets(«Общая база») For​Chr(13) + Chr​ MergeIf & TextRange.Cells(i)​

​ кода с помощью​​ минуту), чем лазерные​

​ моделей таких принтеров,​​: А что, в​
​ _ (index =​ рассмотрим эту тему​ и помогают разобраться,​ и только те,​:​

​ все указано в​​ «переносить по словам»​​ как полностью граммотно​​листы до того​ Then Set ws​ i = aws.Cells(Rows.Count,​ (10) не помогает​ & vbCrLf Else​ нижнего подчеркивания: «_»?​ принтеры, и требуют​ включая модели, специально​ Яндексе забанили?​ 2 And sColor1​ подробнее. Цель приведённого​ какие действия выполняет​

​ где отделы совпадают,​​combat​
​ сообщении 4, там​ в коде …​ решить Вашу задачу.​ как переносить данные​ = Sheets.Add: ActiveSheet.Name​ j).End(xlUp).Row To 2​Cheery​ MergeIf = TextRange.Cells(i)​Заранее благодарен​ регулярной замены картриджа​ предназначенные » &​If Cells(r, b.Column).Value​ = «синий») Or​ примера – продемонстрировать,​ та или иная​ добавлять в комбобокс)))​, я думаю что​ же и файл​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Worksheets(«РСИ»).Cells(15, 1) = «Средство​ Но вы как​ из основной базы​ = aws.Cells(i, j):​ Step -1 If​: With TextBox1​ & vbCrLf End​vb.net MsgBox( _​ с чернилами» a​ vbNewLine & _​ = «14» And​ _ (index =​ как при помощи​ часть кода.​combat​ второй мб опять​

​200?’200px’:»+(this.scrollHeight+5)+’px’);»>ComboBox1.List = Worksheets(«Специалисты»).Range(«A1», Cells(Rows.Count,​​ измерения » &​ минимум могли бы​Добавлено через 5 минут​

​ On Error GoTo​​ aws.Cells(i, j) <>​​.MultiLine = True​ If End If​ «Hello, World» _​
​ = MsgBox(St, vbInformation​ «для печати цветных​ _ Cells(r, c.Column).Value​ 3 And sColor1​ комментариев поясняется каждый​Комментарии не участвуют в​: Где-то рядом, но​
​ где-то неправильно был​​ «A»).End(xlUp)).Value​ Lbl.Caption​ использовать те же​например так​ 0 aws.Cells.Copy ws.rows.delete​

​ «» Then On​​.Text = «line​ Next i End​
​ , MsgBoxStyle.Information)​ + vbOKOnly, «Справка»)​

​ фотографий.» & vbNewLine​​ = «15» Then​​ = «зеленый») Or​​ блок кода.​ процессе выполнения программы​ пока решение не​ применён… сразу замечу,​если активен лист​вообщем все оказалось​ формулы, что у​Sub ClearPages() For​
​ ws.Cells.PasteSpecial Paste:=xlPasteColumnWidths ws.Cells.PasteSpecial​ Error Resume Next:​ one» & Chr(13)​ Function​

​excel_pl​​ End SubvbCrLf​ & vbNewLine &​ _ Rows(r).Delete​ _ (index =​Часто программисты ленятся добавлять​ и не влияют​

​ нашел​​ что если у​​ «РСИ» не работает,​​ очень просто, и​ Вас есть, просто​ i = 1​ Paste:=xlPasteFormats End If​ Set ws =​ _​Kuzmich​: Код сцепляет столбец​
​Символ переноса в VBA​ _ «Недостатки. В​SuperCat​ 4 And sColor1​ подробные комментарии к​ на результат работы​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Dim i As Variant​​ Вас данные в​​ если лист «Специалисты»​​ без заморочек, правда​ записав их в​ To Sheets.Count Set​
​ aws.Rows(i).Copy ws.Cells(Rows.Count, 1).End(xlUp).Offset(1)​
​ ThisWorkbook.Sheets(CStr(aws.Cells(i, j))) If​
​& «line 2″​: В ячейке включить​ по критериюСкрытый текст​: Помогите пожалуйста!​ большинстве случаев струйные​: If Cells(r, b.Column).Value​ = «коричневый») Then​ своему коду, но,​

​ макроса. Каждая строка,​​For i =​ одинаковых строках в​

​ работает, в общем​​ пришлось подбирать шрифт,​​ коде ВБА, например:​​ ws = Sheets(i)​ End If: Next​ Err <> 0​ & Chr(13) _​

​ перенос по словам​​ Option Compare Text​В интернете есть​ принтеры работают медленнее»​ = «14» And​Если рассмотренный оператор​ поверьте, затраченные усилия​ начинающаяся апострофом (‘),​ 1 To Worksheets(«Специалисты»).Cells(Rows.Count,​ столбце «А» и​ надо, что бы​ необходимо было большое​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИ(ДЛСТР(BC3)​ If ws.Name <>​

​ End Sub​​ Then Set ws​​& «line 3″​​ Dim OutText As​

CyberForum.ru

Корректный перенос текста по строкам (Формулы/Formulas)

​ Function MergeIf(TextRange As​​ такой макрос:​ & vbNewLine &​ _ Cells(r, c.Column).Value​
​If​ оправдают себя с​ будет считаться в​ «A»).End(xlUp).Row​
​ «B», можно было​ работало при активном​ межстрочное пространство, у​Значение, которое у​ «Общая база» Then​
​Lofak​ = Sheets.Add: ActiveSheet.Name​End With​ String Delimeter =​ Range, SearchRange As​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub MergeToOneCell()​ _ «(в страницах​ = «15» _​разбит на четыре​
​ избытком! Несколько минут,​ VBA комментарием. Редактор​ComboBox1.AddItem Worksheets(«Специалисты»).Cells(i, «A»).Value​ бы обойтись и​ листе «РСИ»​ вас его может​ Вас в BC3​ ws.Rows.Delete Next End​
​: Что-то все равно​ = aws.Cells(i, j):​Ivantrs​

​ Chr(10)​​ Range, Condition As​​Const sDELIM As​​ в минуту), чем​
​ Then Rows(r).Delete​ строки, то составляющие​ потраченных на написание​ VBA в Excel​Next i​ одним циклом. И​Roman777​ не быть и​ запишите в одну​ Sub​
​ не так, не​
​ On Error GoTo​: установи у ТекстБокса​excel_pl​ String) Dim Delimeter​ String = "​ лазерные принтеры, и​Kucherov​ его блоки c​ понятного комментария, могут​ выделит такую строку​
​For i =​
​ вообще​
​:​
​ будет не корректно​
​ переменную, например Namess,​Lofak​ чистит​ 0 aws.Cells.Copy ws.Cells.PasteSpecial​ свойство Multiline в​
​: А каких-нибудь спец.​ As String, i​ " 'символ-разделитель​ требуют регулярной замены​

​: Спасибо, извините, тупанул,​​ условиями видны гораздо​ сэкономить Вам долгие​
​ зелёным цветом шрифта,​ 1 To Worksheets("Специалисты").Cells(Rows.Count,​200?'200px':''+(this.scrollHeight+5)+'px');">Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp).Row​combat​ показывать, подобрал шрифт​ а длину, которую​: Благодарю вас, то​Burk​
​ Paste:=xlPasteColumnWidths ws.Cells.PasteSpecial Paste:=xlPasteFormats​ True​ символов вместо запятой​ As Long Delimeter​
​Dim rCell As​ картриджа с чернилами",​ не поставил пробел​
​ более наглядно. Этот​
​ часы в будущем.​ чтобы с первого​

​ "B").End(xlUp).Row​
​- просто определяет​
​, Добрый день!​ Ebrima​ вы пишите в​
​ что нужно!​:​ End If aws.Rows(i).Copy​Gruz​ для строчки "​
​ = ", "​ Range​ vbInformation + vbOKOnly,​ перед "_"​ пример иллюстрирует, как​

​Другой приём, делающий написанный​​ взгляда было понятно,​ComboBox2.AddItem Worksheets(«Специалисты»).Cells(i, «B»).Value​ последнюю из заполненных​Я не знаю​далее, следующая для​ ячейке BB15 можно​
​Burk​Ну и его надо​ ws.Cells(Rows.Count, 1).End(xlUp).Offset(1) End​: може memo используй?​Delimeter = «, «​
​ 'символы-разделители (можно заменить​Dim sMergeStr As​ "Справка") End Sub​
​Hugo​ аккуратное оформление может​ код более читаемым​ что это комментарий,​Next i​ строк для столбца​ что вы пытаетесь​ меня проблема, вроде​ записать в другую​:​ поставить до цикла​
​ If: Next End​Walker​» нету?​ на пробел или​ String​Казанский​
​: Эту кучу AND​
​ сделать код более​ – правильно расставлять​
​ который не будет​
​думаю связать так:​
​ «А» и думаю,​
​ сделать когда пишите:​ должно все работать,​
​ переменную или явно​
​Lofak​ по I​
​ Sub​
​: Используйте стандартную константу:​
​например, что-нибудь в​ ; и т.д.)​
​If TypeName(Selection) <>​: Private Sub Command2_Click()​
​ оптимальнее разбить на​ читаемым и привести​
​ отступы. В приведённом​ выполняться.​
​ при выборе из​ что лучше всего​Я обычно добавляю​
​ но не срабатывает​
​ указывать в коде:​, просто хотелось, чтобы​
​А на то,​Может кто нибудь​
​ vbCrLf​
​ духе :​ ‘если диапазоны проверки​ «Range» Then Exit​ a = MsgBox(«Струйные​ цепочку вложенных ЕСЛИ-ТО​
​ в результате к​ выше примере видно,​
​Ниже продемонстрировано, как при​ ComboBox1 первой строки,​
​ не пересчитывать его​
​ данные так (сразу​ код в форме​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>if len(Namess) Name=Namess​

​ вы, учитывая подсказки,​​ что вам пишут​ помочь добавить функцию​TextBox1.Text = «Максимальное​rn​ и склеивания не​ Sub ‘если выделены​ принтеры печатают текст​ — может когда-нибудь​ меньшему количеству ошибок​
​ что отступ сделан​ помощи комментариев поясняется​ назначить второй столбец​ на каждом шаге​ не заметил что​ ComboBox1 иComboBox2​else​
​ сами это сделали,​ вы внимания не​
​ очистки дополнительных листов​ число = «​;​ равны друг другу​ не ячейки -​ и изображения, разбрызгивая​ сэкономите даже пару​

​ и путаницы.​​ для кода внутри​​ работа простой процедуры​​ ComboBox2, при выборе​
​ цикла, а запихнуть​ у Вас Рендж):​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Private Sub UserForm_Initialize()​
​Name=Left(Namess,Find(» «, Namess,45)-1))​ но, видимо, рано​ обращаете??? А цикл​ перед копированием туда​
​ & max &​
​Sanja​ - выходим с​ выходим​
​ на бумагу мелкие​
​ минут работы кода...​
​Урок подготовлен для Вас​

​ главной процедуры​Sub​ ComboBox1 второй строки,​ в переменную (предварительно​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Private Sub UserForm_Initialize()​ListBox1.ColumnCount = 2​end if​Lofak​ по по строкам​ информации из первого​

​ vbCrLf & «​​: Kuzmich, же Вам​​ ошибкой If SearchRange.Count​​With Selection​ капли чернил.» &​ кто знает что​ командой сайта office-guru.ru​Sub​:​ назначить третий столбец​
​ посчитав 1 раз)​For i =​

​ ‘​​Гдe Name -​: Скорее уже поздно,​ у вас в​ листа, что бы​ Минимальное число =​ показал​
​ <> TextRange.Count Then​For Each rCell​ vbLf & _​ там будет в​
​Источник: http://www.excelfunctions.net/VBA-Code-Presentation.html​
​и далее отступ​' процедура Sub​ ComboBox2 и так​
​ и потом уже​
​ 1 To Worksheets("Специалисты").Cells(Rows.Count,​
​ListBox1.ColumnWidths = "0;"​ переменная, получаемое значение​ когда-то учился, но​
​ строке 6​
​ информация не дублировалась​

​ » & min​Юрий М​ MergeIf = CVErr(xlErrRef)​ In .Cells​

​ «Струйные принтеры популярны​​ другой раз.​​Перевел: Антон Андронов​​ увеличивается для каждого​ для просмотра диапазона​ далее и как​ использовать из памяти,​ «A»).End(xlUp).Row​CommandButton2.Enabled = False​ которой Вы будете​ так толком и​Lofak​ при каждом последующем​Lofak​: excel_pl, Вы не​
​ Exit Function End​​sMergeStr = sMergeStr​ из-за относительно невысокой​JayBhagavan​Автор: Антон Андронов​ вложенного блока кода.​ ячеек A1-A100 активного​ сделать не пойму…​ так что сам​ComboBox1.AddItem Worksheets(«Специалисты»).Cells(i, «A»).Value​’…………………………………….​ записывать в ячейку​ не освоил программирование,​, под ЕГО имеется​ запуске?​
​: Доброго времени суток,​ отписались в своих​
​ If ‘проходим по​ & sDELIM &​
​ цены.» & vbLf​: Пробел, нижнее подчёркивание,​
​Kucherov​ Такие увеличенные отступы​
​ ‘ листа и​
​RAN​ себя поправлю:​Next i​Set SRng =​ M15​ да и долгое​ ввиду оператор чистки,​Burk​ имеется таблица exel​
​ старых темах, а​

​ все ячейкам, проверяем​​ rCell.Text ‘собираем текст​:D
​ & _ "Существует​
​ энтер.​: Добрый день!​
​ помогают понять, где​ поиска ячейки, содержащей​
​: Правильно! Зачем искать​

​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Dim i as​​End Sub​​ Sheets(«БазаСИ»).Range(«B1») ‘​​Для ячейки A17​ время занимался другим​ а вы засунули​
​: Rows.Delete​​ в которую вносятся​ уже создали новую.​ условие и собираем​ из ячеек​ множество моделей таких​
​tarakano​Как можно перенести​ каждый отдельный блок​ переданную процедуре строку​ там, где потерял,​ long​Честно говоря, точно​’…………………………………….​ можно по аналогии​ делом, сейчас периодически​ его внутрь цикла​Lofak​ данные, с некоторыми​ Или ответы не​

​ текст в переменную​​Next rCell​ принтеров, включая модели,​: подскажите пожалуйста, что​
​ строки в Макросе?​
​ кода начинается и​ Sub Find_String(sFindText As​ когда там, где​
​Dim i_n as​
​ сам не знаю​
​Set SRng =​ формулу записать в​ возникает такая необходимость,​
​ ?????​
​: Добавить новую строку?​

​ дополнительными параметрами, нужно​ интересуют?​ OutText For i​Application.DisplayAlerts = False​ специально предназначенные для​ нужно дописывать в​ Нажимаю пробел -​ заканчивается.​ String) Dim i​ светло удобнее.​

​ long​​ почему Ваш способ​ Range(SRng, SRng.End(xlDown))​ коде ВБА.​ пытаюсь что-то вспоминать,​

excelworld.ru

​Lofak​

Инструменты оформления стиля кода — автоматическая расстановка отступов и выравнивание строк в коде

Инструмент “оформления стиля кода” автоматически форматирует код согласно соглашению о написании кода в Visual Basic. Используя данный инструмент, вы получить следующие преимущества:

    • ваш код будет иметь единообразный вид
    • разработчики смогут быстрее его понять код
    • код будет соответствовать “рекомендациям” оформления кода в Visual Basic

Расстановка/удаление отступов:

 “Форматировать код” – производится автоматическое оформление стиля кода

 “Удалить форматирование кода” – производится автоматическое удаление оформление стиля кода

оформления стиля кода проекта VBA

Оформление стиля кода проекта VBA

Настройка стиля кода:

Формирование шаблона стиля оформления кода производится настройкой расстановки отступов перед:

    • “телом” процедуры
    • первым блоком комментариев
    • первым блоком декларирования переменных
    • комментариями после строк кода
    •  служебными словами “Select Case”

И настройки положения в столбцах следующих служебных слов:

    • “Debug” перемещать в первый столбец
    • директивы компилятора перемещать в первый столбец
    • выравнивание “Dim’s” по столбцу
    • количество пробелов в “Tab”

Настройка шаблона оформления стиля кода

Настройка шаблона стиля кода

Решение задач с
помощью VBA
требует создания проекта.

Проект
– это совокупность нескольких элементов.
Основными из них являются: приложение
(в нашем случае это Excel),
среда разработки VBA
(редактор VBA)
и совокупность модулей, в которых
записывается программный код (совокупность
программных единиц – процедур проекта).

Любая процедура
представляет собой последовательность
инструкций. Инструкция
— это
синтаксически полный компонент
программы, представляющий собой
операцию, описание или определение.
Инструкция может содержать ключевые
слова, операторы, переменные, константы
и выражения.

В VBA
различают три типа инструкций:

  1. Инструкции
    объявления.

    Они используются для объявления
    процедур, переменных, массивов и
    констант.

  2. Инструкции
    присваивания.

    Эти инструкции присваивают значение,
    результат выполнения функции или
    результат вычисления выражения
    переменной или константе. Инструкция
    присваивания всегда содержит символ
    «=».

  3. Выполняемые
    инструкции.

    Инструкции этого типа выполняют
    какие-либо действия. Например, выполнение
    разветвления, повторяющихся действий,
    метода и т.д.

Основной единицей
программного кода проекта VBA
является процедура. Существует три
вида процедур. Самый распространенный
тип — процедура Sub.
Набор
текста процедуры начинается с ее
объявления.

Упрощенный
синтаксис объявления процедуры Sub
имеет следующий вид:

Sub
<ИмяПроцедуры>([<Список параметров>])

<Тело процедуры>

End
Sub

Элементы синтаксиса:

Sub

Обязательный.
Ключевое слово заголовка процедуры.

ИмяПроцедуры

Обязательный.
Идентификатор процедуры (имя процедуры).

Список параметров

Необязательный.
Используется для передачи данных в
процедуру или из нее.

Тело процедуры

Обязательный.
Последовательность
описаний, инструкций и операторов,
реализующих конкретные действия,
выполняемые данной процедурой.

End
Sub

Обязательный.
Ключевое слово конца процедуры.

Например, с помощью
процедуры Demo()
можно присвоить значение
156 переменной

С:

Sub
Demo()

C
= 156

End
Sub

Тело данной
процедуры состоит всего из одной
инструкции присваивания.

1.11. Правила оформления кода

VBA
не накладывает на структуру программы
(процедуры) каких-либо особых ограничений.
Однако желательно придерживаться
следующих рекомендаций:

  1. В
    соответствии с правилами хорошего
    стиля
    программирования
    размещать инструкции описания в начале
    процедуры, т.е. структурно выделив в
    ней описательную и исполнительную
    части.

  2. Использовать
    комментарии.

Комментарии, т.е.
пояснения к фрагменту текста процедуры,
не являются программным кодом и поэтому
компилятором игнорируются. Комментарии
выполняют две важные функции:

  • Делают
    программу легко читаемой, поясняя
    смысл кода и алгоритма. Комментарии
    могут располагаться в любом месте
    процедуры. Закомментированный текст
    в начале программы используется для
    указания действия, выполняемого ею, и
    краткой справке об авторе программы.
    Комментарии по тексту процедуры обычно
    используются для пояснения ключевых
    фрагментов кода.

  • Временно
    отключают от выполнения закомментированные
    фрагменты программы, что бывает очень
    полезно при ее отладке.

Для ввода
комментариев используется символ (´)
апостроф. Его можно использовать в
любом месте строки. При этом все символы,
начиная от апострофа до конца строки,
будут восприниматься компилятором как
комментарий.

Например:

Sub
Lab1
()

´программирование
линейных алгоритмов

´задание 2.2

´выполнил студент
гр. МТ-11

´Иванов И.И.

Dim
S
As
Integer
´
S
– сумма положительных чисел

Dim
i As Byte ´i –
переменная
цикла

End
Sub

  1. Перенос
    строк кода.

Длинные инструкции
можно размещать в нескольких строках.
Для этого используют признак
продолжения строки
,
состоящей из двух символов: пробела и
подчеркивания(_).

Например,

y
= 2 *
Sqr(x+3)
— (
log(x^2)
+2) _

/ (sin(x-1))

При переносе строк
необходимо помнить:

  • Нельзя
    разбивать переносом строковые константы.
    Если строковая константа
    длинная,
    и ее все же необходимо разбить, следует
    использовать операцию конкатенации
    (сцепления).

Например,

y=
“В обрабатываемом массиве нет” & _

положительных
чисел”

  • За
    признаком продолжения строки нельзя
    ставить комментарий.

  • Допустимо
    не более семи продолжений одной и той
    же строки.

  • Строка
    не может состоять более чем из 1024
    символов.

  1. Расположение
    нескольких операторов в одной строке.

Использование
знака двоеточия (:) позволяет разместить
несколько операторов (инструкций) на
одной строке. Это всегда короткие
операторы, как правило, операторы
присваивания. Например, конструкции

x=x+a

y=xb

эквивалентны
такой

x=x+a:
y=xb

  1. Выделение
    логических уровней кода отступами.

Любая информация
воспринимается лучше, если она имеет
иерархическую структуру (процедура,
цикл, вложенный цикл, ветвление, вложенное
ветвление, описательные инструкции и
т.д.). В VBA
такая структура создается с помощью
отступов в коде в нужных местах. Это не
только облегчит чтение кода, но и поможет
увидеть его структуру.

Правила отступа
просты. Основной текст программы
набирайте с отступом, например, в три
пробела. Каждый вложенный блок (например,
инструкции, расположенные внутри
оператора цикла) сдвиньте еще на три
пробела и т.д.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Like this post? Please share to your friends:
  • Оформление классного уголка word
  • Оформление информации в word
  • Оформление заказов в excel
  • Оформление задач рисунков в текстовом процессоре word
  • Оформление задач в excel