Отступ в ячейке в excel в vba

 

АналитикБУ

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

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

Добрый день уважаемые форумчане.

Искал вариант макроса, который бы позволил бы проанализировать столбец А, в котором записаны названия строк, и определить уровень каждой записи в ячейке.
Полученный номер уровень отступа записать в столбец G напротив соответствующей строки. Хотел решить этот вопрос с помощью свойства .IndenLevel, но к сожалению из сводной таблицы вытащить уровень отступа не удалось.

Прошу подсказать, чем можно заменить .IndentLevel или как можно решить задачу.

 

Kuzmich

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

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

#2

09.02.2020 13:27:20

Цитата
Хотел решить этот вопрос с помощью свойства .IndenLevel, но к сожалению

Вроде получается

Код
Sub Tablica()
Dim i As Long
Dim iLastRow As Long
 iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
  For i = 4 To iLastRow
    Cells(i, 8) = Cells(i, 1).IndentLevel
  Next
End Sub
 

Юрий М

Модератор

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

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

#3

09.02.2020 13:32:12

Цитата
АналитикБУ написал:
из сводной таблицы вытащить уровень отступа не удалось

У меня на Вашем файле получилось:

Код
Debug.Print ActiveCell.IndentLevel
 

АналитикБУ

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

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

Kuzmich, благодарю за помощь.
И правда получается.  

 

БМВ

Модератор

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

Excel 2013, 2016

#5

09.02.2020 13:44:25

У вас наверно неправильная сводная таблица и дает неправильные отступы

Код
Function GetIdentLevel(ByRef Cell As Range)
    GetIdentLevel = Cell(1).IndentLevel
End Function

Прикрепленные файлы

  • example1510.xlsm (22.54 КБ)

Изменено: БМВ09.02.2020 13:45:40

По вопросам из тем форума, личку не читаю.

0 / 0 / 0

Регистрация: 27.05.2017

Сообщений: 20

1

Отступ текста (абзац) в объединённой ячейке

19.10.2017, 17:35. Показов 9762. Ответов 19


Студворк — интернет-сервис помощи студентам

Уважаемые умы, вот реально сложная задача! (По крайней мере я за 2 дня поисков в сети ни нашёл ничего подобного.)
Нужен макрос создающий отступ текста внутри объединённой ячейки (абзац). Как в Word, когда начинается новое предложение.
Надеюсь задачу я описал верно..



0



1237 / 673 / 240

Регистрация: 22.12.2015

Сообщений: 2,094

19.10.2017, 18:00

2

Цитата
Сообщение от Вячеслав1408
Посмотреть сообщение

Как в Word, когда начинается новое предложение.

Следует ли полагать, что речь идет об Excel?

Цитата
Сообщение от Вячеслав1408
Посмотреть сообщение

Надеюсь задачу я описал верно..

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



0



0 / 0 / 0

Регистрация: 27.05.2017

Сообщений: 20

19.10.2017, 18:10

 [ТС]

3

Цитата
Сообщение от Dinoxromniy
Посмотреть сообщение

Следует ли полагать, что речь идет об Excel?

Я хочу сделать автоматический отступ («КРАСНАЯ СТРОКА» первой строки текста) в ячейке Excel.



0



Dinoxromniy

1237 / 673 / 240

Регистрация: 22.12.2015

Сообщений: 2,094

19.10.2017, 19:54

4

Цитата
Сообщение от Вячеслав1408
Посмотреть сообщение

Я хочу сделать автоматический отступ («КРАСНАЯ СТРОКА» первой строки текста) в ячейке Excel.

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

Visual Basic
1
2
3
4
5
Public Sub tab_emulate()
 
    Selection.Cells(1, 1).Value = Space(5) & Selection.Cells(1, 1).Text
 
End Sub



0



0 / 0 / 0

Регистрация: 27.05.2017

Сообщений: 20

19.10.2017, 20:19

 [ТС]

5

Если бы всё было так просто…
Спасибо за решение, но задача не в этом. Общий смысл воспринят правильно. Но данный алгоритм не решает задачу в целом…
Если в ячейке несколько абзацев, он не работает. Только для первого.
Хотелось бы более глубокое решение. Чтобы текст в объединённой ячейке выстраивался автоматически как в Word. То есть при образовании 2-го и последующих абзацев перед ними автоматически появлялась «красная строка».
Помогите, если это возможно….



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

19.10.2017, 21:09

6

Excel не Word, но можете попробовать что-то вроде :



0



Остап Бонд

Заблокирован

19.10.2017, 21:35

7

Лучший ответ Сообщение было отмечено Вячеслав1408 как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Worksheet_Change(ByVal Target As Range)
Dim t As String: t = Space$(8) 'наш псевдоТаб из 8 пробелов
If Target.Column = 8 Then 'отслеживаем "красную строку" в восьмом столбце
  If Target.Count = 1 Then
    Application.EnableEvents = False
    Target.Value = t & Replace(Replace(Target.Value, t, ""), vbLf, vbLf & t)
    Application.EnableEvents = True
  End If
End If
End Sub

Не по теме:

пока сочинял, ответ прозвучал…



1



0 / 0 / 0

Регистрация: 27.05.2017

Сообщений: 20

19.10.2017, 21:42

 [ТС]

8

Цитата
Сообщение от pashulka
Посмотреть сообщение

Excel не

Слушай, ну вроде работает! Спасибо!
Только не пойму… Не могу запустить его. Один раз получилось. А теперь нет…

И ещё, можно ли его привязать к другому событию. Например Activate. Сам пробовал выдаёт ошибку.
А ещё, если не в нагрузку, напиши, на какой диапазон он распространяется… Где вносит изменения?

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

Цитата
Сообщение от Остап Бонд
Посмотреть сообщение

пока сочинял, ответ прозвучал…

А можешь на примере прислать, а то я «по пояс деревянный». Могу не совладать с высокими материями….



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

19.10.2017, 21:51

9

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

Остап Бонд, можно ещё и так :

Visual Basic
1
Target.Value = t & Replace(Target.Value, vbLf, vbLf & t)



0



0 / 0 / 0

Регистрация: 27.05.2017

Сообщений: 20

19.10.2017, 21:56

 [ТС]

10

Цитата
Сообщение от pashulka
Посмотреть сообщение

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

Да это я курсе… Но ты знаешь, что-то никак не запускается…
И ещё вопрос вдогонку… Он будет работать если текст будет вписываться формулой?

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

Цитата
Сообщение от pashulka
Посмотреть сообщение

Остап Бонд, можно ещё и так :

А можешь на примере прислать?



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

19.10.2017, 22:05

11

Вячеслав1408, Если первый раз получилось, а затем никак … то либо после блокировки событий, возникла ошибка, либо Вы «игрались» с событиями и выполнили эту строку Application.EnableEvents = False. В любом случае, верните всё на круги своя Application.EnableEvents = True и продолжите тестирование, в т.ч. и с формулами, которые будут заменены на их значения.



0



Остап Бонд

Заблокирован

19.10.2017, 22:06

12

Лучший ответ Сообщение было отмечено Вячеслав1408 как решение

Решение

Цитата
Сообщение от pashulka
Посмотреть сообщение

можно ещё и так

При вставке новых «абзацев» отступы предыдущих будут расти.
А вот эту строчку

Visual Basic
1
tmp = redLine & Join(tmp, vbLf & redLine)

я записал бы так

Visual Basic
1
tmp =" " & redLine & Join(tmp, vbLf & redLine)

а то как-то не по линеечке выровняны абзацы…



1



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

19.10.2017, 22:15

13

Цитата
Сообщение от Остап Бонд
Посмотреть сообщение

При вставке новых «абзацев» отступы предыдущих будут расти.

В моём не будут, в Вашем — да.

Цитата
Сообщение от Остап Бонд
Посмотреть сообщение

а то как-то не по линеечке выровняны абзацы…

опять фантазии, везде добавлен один и тот же отступ, а не по линеечке, это из-за выравниваний.



0



0 / 0 / 0

Регистрация: 27.05.2017

Сообщений: 20

19.10.2017, 22:20

 [ТС]

14

Не

Цитата
Сообщение от pashulka
Посмотреть сообщение

Если первый раз получилось, а затем никак … то либо после блокировки событий, возникла ошибка, либо Вы «игрались» с событиями и выполнили эту строку Application.EnableEvents = False. В любом случае, верните всё на круги своя Application.EnableEvents = True и продолжите тестирование, в т.ч. и с формулами, которые будут заменены на их значения.

Не знаю всё удалил…. Заново скачал приложенный файл, открыл. Нажимаю, изменяю — ничего не происходит.

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

Цитата
Сообщение от Остап Бонд
Посмотреть сообщение

Visual BasicВыделить код
1
2
3
4
5
6
7
8
9
10
Private Sub Worksheet_Change(ByVal Target As Range)
Dim t As String: t = Space$(8) ‘наш псевдоТаб из 8 пробелов
If Target.Column = 8 Then ‘отслеживаем «красную строку» в восьмом столбце
*If Target.Count = 1 Then
* * Application.EnableEvents = False
* * Target.Value = t & Replace(Replace(Target.Value, t, «»), vbLf, vbLf & t)
* * Application.EnableEvents = True
* End If
End If
End Sub

А можно этот макрос на примере?



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

19.10.2017, 22:26

15

Остап Бонд, сорри, неверно понял Ваш мессаж. но если использовать application.trim то можно один replace, собственно, так и было в моём первоначальном примере.



0



0 / 0 / 0

Регистрация: 27.05.2017

Сообщений: 20

19.10.2017, 22:44

 [ТС]

16

А может мне всё-таки кто-нибудь поможет???
Что-то как-то у меня не получилось применить ни один из примеров….



0



Остап Бонд

Заблокирован

19.10.2017, 23:42

17

Вячеслав1408, скопируйте строку кода

Цитата
Сообщение от pashulka
Посмотреть сообщение

верните всё на круги своя

Visual Basic
1
Application.EnableEvents = True 'ВОТ ЭТУ СТРОКУ

в окно Immediate (Ctrl+G) и ткните НА НЕЙ [Enter].



0



0 / 0 / 0

Регистрация: 27.05.2017

Сообщений: 20

20.10.2017, 06:25

 [ТС]

18

Цитата
Сообщение от Остап Бонд
Посмотреть сообщение

Вячеслав1408, скопируйте строку кода
Сообщение от pashulka
верните всё на круги своя
Visual BasicВыделить код
1
Application.EnableEvents = True ‘ВОТ ЭТУ СТРОКУ
в окно Immediate (Ctrl+G) и ткните НА НЕЙ [Enter].

Уважаемый Остап Бонд, в очередной раз прошу прислать Ваш вариант на примере файла. Я так понимаю он применён к конкретному диапазону, а не ко всему листу, как это сделано у pashulka. Поэтому Ваш пример мне предпочтительнее.



0



Остап Бонд

Заблокирован

20.10.2017, 06:43

19

Лучший ответ Сообщение было отмечено Вячеслав1408 как решение

Решение

вот

Вложения

Тип файла: xls RL.xls (29.0 Кб, 30 просмотров)



1



0 / 0 / 0

Регистрация: 27.05.2017

Сообщений: 20

20.10.2017, 06:57

 [ТС]

20

ВОТ ЭТО ДЕЛО! Спасибо огромное! Всё работает!

Только вот что:

Когда в ячейку вставлена формула, которая ссылается на другую ячейку (в той где текст заполняется), макрос стирает формулу и оставляет текст…. Можно это как-то исправить?



0



In Excel column «C» has values of either Yes or No. If the value is «No» then I want to indent the value of column «D» 2 indents if possible. How would one accomplish this?

asked Apr 30, 2015 at 17:49

Tamela's user avatar

1

Try this:

For Each i in Sheets("sheetname").Range("C1:C100")  ' change to last row number
    If i.Value = "No" Then
        i.Offset(0,1).InsertIndent 2 ' Offset selection from column C to D
    End If
Next i

Explanation: For each loops through the cells in column C. For every round of the loop, the current cell in column C is assigned to the variable i. You then check, whether that cell’s value is «No» and if yes, you add the two «indents» to the neighboring cell in column D. (using the Offset(rows, cols) function. Offset(0,1) = same row, one column to the right)

answered Apr 30, 2015 at 18:06

nicolaus-hee's user avatar

nicolaus-heenicolaus-hee

7871 gold badge9 silver badges25 bronze badges

How about:

Sub IndentD()
    For Each r In Intersect(Range("C:C"), ActiveSheet.UsedRange)
        If r.Text = "No" Then
            r.Offset(0, 1).InsertIndent 2
        End If
    Next r
End Sub

answered Apr 30, 2015 at 18:05

Gary's Student's user avatar

Gary’s StudentGary’s Student

95.3k9 gold badges58 silver badges98 bronze badges

1

На чтение 3 мин. Просмотров 144 Опубликовано 15.12.2019

Содержание

  1. Зачем это нужно?
  2. Решение проблемы
  3. 2 ответа
  4. про бизнес и себя

Зачем это нужно?

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

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

Решение проблемы

Придать данным большей наглядности помогут отступы. Мало кто знает, но ставить отступы можно как слава так и справа от ячейки. Чтобы задать эти отступы необходимо:

  1. Выделить ячейки в которых хотите установить отступы. В нашем примере столбцы Товар и Магазин (можно столбцы целиком).
  2. Открыть диалоговое окно Формат ячеек. Для этого на вкладке Главная выберите Параметры выравнивания.

  1. В поле Выравнивание по горизонтали укажите По левому краю (отступ).
  2. В поле Отступ введите значение 1 (как правило больше не нужно). Нажмите OK.

В результате этих действий добавится отступ слева от ячеек и данные станет намного удобнее читать. Посмотрите на итоговый результат.

Аналогичным образом можно было бы установить отступ по правому краю для столбцов Цена и № п/п. Какой способ лучше выбирать вам, главное добиться большей наглядности данных.

0 Tamela [2015-04-30 20:49:00]

В столбце Excel «C» есть значения либо «Да», либо «Нет». Если значение «Нет», я хочу, если это возможно, отступать от значения столбца «D» 2 отступов. Как это сделать?

vba indentation excel

2 ответа

0 Решение Gary’s Student [2015-04-30 21:05:00]

2 nhee [2015-04-30 21:06:00]

Объяснение: For each цикла через ячейки в столбце C. Для каждого цикла цикла текущая ячейка в столбце C присваивается переменной i . Затем вы проверяете, является ли значение этой ячейки «Нет», и если да, вы добавляете два «отступа» в соседнюю ячейку в столбце D. (используя функцию » Offset(rows, cols) . Offset(0,1) = такое же строка, одна колонка справа)

про бизнес и себя

Макрос для изменения отступов в документе excel на Листе, на котором запущен макрос. Регулирование отступов происходит через значения в скобках. Мои стандартные параметры ниже:

Sub Macros

With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.2)
.RightMargin = Application.InchesToPoints(0.2)
.TopMargin = Application.InchesToPoints(0.4)
.BottomMargin = Application.InchesToPoints(0.4)
.HeaderMargin = Application.InchesToPoints(0.1)
.FooterMargin = Application.InchesToPoints(0.1)
End With
End Sub

Можно дополнить им любой макрос или оставить самостоятельным.

ВикиЧтение

VBA для чайников
Каммингс Стив

Правила для отступов

Правила для отступов

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

Например, если VBA выполняет операторы внутри конструкции If. . .Then. . .Else.

Do … Loop или For Next как одну группу, то операторы такой группы должны иметь один и тот же отступ. Вот подходящий пример программного кода:

Do While intC 20

intA = intA + 1

If intA = intB Then

intA – 5

intB – 10

.Else

intA = intB

intC = 20

.End If

Loop

VBA выполняет оператор intA = intA + 1 и структуру If.. .Then. .. Else прикаждом проходе структуры Do… Loop. По этой причине я использовал один и тот же отступ и для оператора intA = intA + 1, и для трех операторов, задающих структуру If. . .Then. . .Else ( If. . .Then, Else и End If ). Два оператора, следующие непосредственно за оператором If . . .Then, будут выполняться, если только intA = intE, поэтому эти два оператора получают дополнительный отступ, как и два оператора, следующие за Else.

Обратите внимание, что управляющие структуры типа Do … Loop и If . . . Then. . .Else всегда состоят как минимум из двух операторов (один должен определить начало структуры, а второй — ее конец). Дня структуры Do. . .Loop завершающий оператор Loop, а для If… Then . . .Else — это End If. Если в рамках структуры есть другие операторы, для них следует использовать тот же отступ. Это позволит ясно различить и саму структуру, и содержащиеся в ней подчиненные операторы. (Управляющие структуры будут подробно рассмотрены в главе 8.)

Как сделать отступ

Для добавления отступа в строке программного кода нажмите клавишу пробела или Tab, чтобы сдвинуть текстовый курсор вправо. Можно задать расстояние, на которое клавиша Tab сдвигает курсор, если выбрать Tools=Options. В диалоговом окне Options (Параметры) на вкладке Editor (Редактор) есть поле Tab Width (Отступ табуляции), где можно впечатать число, соответствующее количеству пробелов. Поскольку пространства в окне редактора Visual Basic не слишком много, лично я установил отступ табуляции, равный 3 пробелам, хотя можно указать любое число от 1 до 32.

Если по каким-то причинам нажимать клавишу табуляции вам не слишком удобно, всегда можно сдвинуть начало строки вправо или влево с помощью предлагаемых VBA кнопок Indent (Добавить отступ) и Outdent (Удалить отступ) соответственно. Эти кнопки применяются не только к отдельным строкам, но и к выделенным фрагментам текста, так что одним щелчком можно добавить или убрать отступ целого блока. Обратите внимание на то, что при использовании этих кнопок положение точки ввода в строке игнорируется — всегда увеличивается или уменьшается отступ сразу всей строки.

Читайте также

Правила@

Правила@
Правила @ начинаются с ключевого слова @, непосредственно за которым следует идентификатор (например, @import, @page). Каждый из этих идентификаторов далее рассмотрим подробнее.Все же надо отметить, что браузер с поддержкой CSS будет игнорировать все правила @import, которые

Свойства отступов

Свойства отступов
Свойства отступов позволяют задать ширину области отступов блока.Всего существует четыре свойства отступов: padding-top, padding-right, padding-bottom и padding-left, которые задают верхний, правый, нижний и левый отступы соответственно. Эти свойства можно комбинировать.

Параметры отступов

Параметры отступов
Стандарт CSS предлагает средства для создания отступов двух видов.1. Отступ между воображаемой границей элемента Web-страницы и его содержимым — внутренний отступ. Такой отступ принадлежит данному элементу Web-страницы, находится внутри его.2. Отступ

Параметры отступов и рамок

Параметры отступов и рамок
Для задания отступов мы можем пользоваться атрибутами стиля, знакомыми нам по главе 11.— Для задания внутренних отступов между содержимым ячейки и ее границей — атрибутами стиля padding-left, padding-top, padding-right, padding-bottom и padding.— Для задания внешних

Правила

Правила
Правила используются в таблицах стилей для особых нужд.charsetЗадает текстовую кодировку для внешней таблицы стилей.@charset {Кодировка};Пример:@charset «windows-1251»;Может использоваться только во внешних таблицах стилей; должна быть первой строкой в файле. Поддерживается IE

4.11.4. Правила «все кроме»

4.11.4. Правила «все кроме»
Очень часто приходится задавать правила в виде «все кроме». Например, нужно запретить доступ к порту telnet всем пользователям, кроме компьютера с адресом 192.168.77.10. Лучше поступить следующим образом: сначала разрешить доступ для компьютера 192.168.77.10, а

Параметры отступов

Параметры отступов
Стандарт CSS предлагает средства для создания отступов двух видов.1. Отступ между воображаемой границей элемента Web-страницы и его содержимым — внутренний отступ. Такой отступ принадлежит данному элементу Web-страницы, находится внутри его.2. Отступ

Параметры отступов и рамок

Параметры отступов и рамок
Для задания отступов мы можем пользоваться атрибутами стиля, знакомыми нам по главе 11.— Для задания внутренних отступов между содержимым ячейки и ее границей — атрибутами стиля padding-left, padding-top, padding-right, padding-bottom и padding.— Для задания внешних

19.6.5. Правила фильтрации

19.6.5. Правила фильтрации
Задание правил фильтрации IPTables похоже на задание правил в IPChains. Для создания правила используется опция —append (или -А). После этой опции указывается имя цепочки и критерий выбора пакетов в этой цепочке. Затем указывается опция —jump (или -j), значением

§ 165. Три правила про вы

§ 165. Три правила про вы
7 сентября 2010В русском языке существует местоимение вы, к которому прилагаются довольно простые правила употребления и неупотребления.Вы всегда пишется с маленькойСовершенно невыносима рекламно-подобострастная манера писать Вы с заглавной

1.5. Правила

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

2.1. Синтаксические правила

2.1. Синтаксические правила
Синтаксические правила языка описывают допустимые способы соединения слов. В соответствии с нормами английского языка предложение «I see a zebra» («я вижу зебру») является синтаксически правильным в отличие от предложения «zebra see I а» («зебра видит

15.4.3. Правила make

15.4.3. Правила make
Некоторые из наиболее интенсивно используемых правил в типичных make-файлах вообще не выражают зависимостей. Они позволяют связать небольшие процедуры, которые разработчик хочет механизировать, например, создание дистрибутивного пакета или удаление всех

15.4.3. Правила make

15.4.3. Правила make
Некоторые из наиболее интенсивно используемых правил в типичных make-файлах вообще не выражают зависимостей. Они позволяют связать небольшие процедуры, которые разработчик хочет механизировать, например, создание дистрибутивного пакета или удаление всех

Понравилась статья? Поделить с друзьями:
  • Отступ в сносках word
  • Отступ в нумерованном списке word
  • Отступ в маркированном списке word
  • Отступ в word каким должен быть
  • Отступ абзаца слева в документе word это