Excel как добавить строку в конце таблицы vba

Вставка диапазона со сдвигом ячеек вправо или вниз методом Insert объекта Range. Вставка и перемещение строк и столбцов из кода VBA Excel. Примеры.

Range.Insert – это метод, который вставляет диапазон пустых ячеек (в том числе одну ячейку) на рабочий лист Excel в указанное место, сдвигая существующие в этом месте ячейки вправо или вниз. Если в буфере обмена содержится объект Range, то вставлен будет он со своими значениями и форматами.

Синтаксис

Expression.Insert(Shift, CopyOrigin)

Expression – выражение (переменная), возвращающее объект Range.

Параметры

Параметр Описание Значения
Shift Необязательный параметр. Определяет направление сдвига ячеек. Если параметр Shift опущен, направление выбирается в зависимости от формы* диапазона. xlShiftDown (-4121) – ячейки сдвигаются вниз;
xlShiftToRight (-4161) – ячейки сдвигаются вправо.
CopyOrigin Необязательный параметр. Определяет: из каких ячеек копировать формат. По умолчанию формат копируется из ячеек сверху или слева. xlFormatFromLeftOrAbove (0) – формат копируется из ячеек сверху или слева;
xlFormatFromRightOrBelow (1) – формат копируется из ячеек снизу или справа.

* Если диапазон горизонтальный или квадратный (количество строк меньше или равно количеству столбцов), ячейки сдвигаются вниз. Если диапазон вертикальный (количество строк больше количества столбцов), ячейки сдвигаются вправо.

Примеры

Простая вставка диапазона

Вставка диапазона ячеек в диапазон «F5:K9» со сдвигом исходных ячеек вправо:

Range(«F5:K9»).Insert Shift:=xlShiftToRight

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

Вставка вырезанного диапазона

Вставка диапазона, вырезанного в буфер обмена методом Range.Cut, из буфера обмена со сдвигом ячеек по умолчанию:

Range(«A1:B6»).Cut

Range(«D2»).Insert

Обратите внимание, что при использовании метода Range.Cut, точка вставки (в примере: Range("D2")) не может находится внутри вырезанного диапазона, а также в строке или столбце левой верхней ячейки вырезанного диапазона вне вырезанного диапазона (в примере: строка 1 и столбец «A»).

Вставка скопированного диапазона

Вставка диапазона, скопированного в буфер обмена методом Range.Copy, из буфера обмена со сдвигом ячеек по умолчанию:

Range(«B2:D10»).Copy

Range(«F2»).Insert

Обратите внимание, что при использовании метода Range.Copy, точка вставки (в примере: Range("F2")) не может находится внутри скопированного диапазона, но в строке или столбце левой верхней ячейки скопированного диапазона вне скопированного диапазона находится может.

Вставка и перемещение строк

Вставка одной строки на место пятой строки со сдвигом исходной строки вниз:


Вставка четырех строк на место пятой-восьмой строк со сдвигом исходных строк вниз:


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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Sub Primer1()

Dim n As Long, k As Long, s As String

‘Номер строки, над которой необходимо вставить строки

n = 8

‘Количесто вставляемых строк

k = 4

‘Указываем адрес диапазона строк

s = n & «:» & (n + k 1)

‘Вставляем строки

Rows(s).Insert

End Sub

‘или то же самое с помощью цикла

Sub Primer2()

Dim n As Long, k As Long, i As Long

n = 8

k = 4

    For i = 1 To k

        Rows(n).Insert

    Next

End Sub


Перемещение второй строки на место шестой строки:

Rows(2).Cut

Rows(6).Insert

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


Перемещение шестой строки на место второй строки:

Rows(6).Cut

Rows(2).Insert

В этом случае шестая строка окажется на месте второй строки.

Вставка и перемещение столбцов

Вставка одного столбца на место четвертого столбца со сдвигом исходного столбца вправо:


Вставка трех столбцов на место четвертого-шестого столбцов со сдвигом исходных столбцов вправо:


Перемещение третьего столбца на место седьмого столбца:

Columns(3).Cut

Columns(7).Insert

Третий столбец окажется на месте шестого столбца, так как четвертый столбец заместит вырезанный третий столбец, пятый встанет на место четвертого и т.д.


Перемещение седьмого столбца на место третьего столбца:

Columns(7).Cut

Columns(3).Insert

В этом случае седьмой столбец окажется на месте третьего столбца.


 

paff

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

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

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

Изменено: paff03.11.2018 01:04:27

 

paff

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

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

#2

02.11.2018 13:02:24

Нашел макросы
1. который удаляет последнюю строчку

Код
Sub Удаляет_и_добавляет()
    Dim r As Range
    Set r = [a1].CurrentRegion
    r.Rows(r.Rows.Count).Delete
End Sub

2 который добавляет последнюю строку

Код
Sub Копировать_последнюю_строку()
    Dim LastRow&, LastCol&
    With ActiveSheet
        LastRow = .UsedRange.Rows.Count + .UsedRange.Row - 1
        LastCol = .UsedRange.Columns.Count + .UsedRange.Column - 1
        Range(.Cells(LastRow, 1), .Cells(LastRow, LastCol)).Copy Destination:=.Cells(LastRow + 1, 1)
    End With
End Sub

Подскажите пожалуйста, как их объединить и чтобы удалял 1 раз, а добавлял сколько угодно раз.

Изменено: paff02.11.2018 13:48:22

 

paff

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

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

#3

02.11.2018 13:11:22

Запутался совсем.
Первый код удаляет строку таблицы, а ниже, где написано «Страница 1/2» не трогает.

Тут меня осенило, что эта и есть та строка куда мне надо добавить строки и я вместо delete «написал» вставить и получился такой код, но он не работает:

Код
Sub Удаляет_и_добавляет()
    Dim r As Range
    Set r = [a1].CurrentRegion
    r.Rows(r.Rows.Count).Copy Destination:=.Cells(LastRow + 1, 1)
End Sub

Изменено: paff02.11.2018 13:48:08

 

ivanok_v2

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

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

#4

02.11.2018 13:12:44

как вариант.
Настройте сами колонку поиска и стартувую строку

Код
Public Sub addRow()
 Dim lRow&
 lRow& = lastRow(1, 2)
 Rows(lRow& & ":" & lRow&).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub

Private Function lastRow(ByVal startRow&, findColumn&) As Long
    For lastRow = startRow& To 1000000
        If Cells(lastRow&, findColumn&) = "" Then Exit For
    Next
End Function
 

paff

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

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

Спасибо!! Сейчас попробую. Но файл эксель выгружается из программы и всегда может быть разной «длины».

Изменено: paff02.11.2018 13:15:22

 

ivanok_v2

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

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

#6

02.11.2018 13:19:16

Цитата
paff написал:
Но файл эксель выгружается из программы и всегда может быть разной «длины».

ето учтено, стартовоя строка всегда одна и таже

 

paff

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

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

#7

02.11.2018 13:24:08

Спасибо ! Получается! Сейчас пробую цифры разные вставлять в диапазон

Код
Public Sub addRow() Dim lRow&
 lRow& = lastRow(1, 2)
 Rows(lRow& & ":" & lRow&).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub
 
Private Function lastRow(ByVal startRow&, findColumn&) As Long
    For lastRow = startRow& To 1000000
        If Cells(lastRow&, findColumn&) = "" Then Exit For
    Next
End Function

Потому что плохо в этом бум-бум!)

Изменено: paff02.11.2018 13:43:06

 

ivanok_v2

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

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

paff, зачем повторяете в сообщении код?
и приведите код в в нормальный вид тегом <….>

Изменено: ivanok_v202.11.2018 13:27:44

 

paff

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

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

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

 

ivanok_v2

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

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

#10

02.11.2018 13:39:55

Цитата
paff написал:
т вы подскажите, где нужно.

на сообщении
Изменить->Выделить код-><…>->Сохранить

 

paff

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

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

Поправил. Спасибо. Хоть что то получилось))

Изменено: paff02.11.2018 13:56:18

 

paff

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

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

#12

02.11.2018 13:53:01

Подскажите, как добавить не последнюю строку, а предпоследнюю строку из этого кода??

Код
Sub Копировать_последнюю_строку()    
Dim LastRow&, LastCol&
With ActiveSheet
        LastRow = .UsedRange.Rows.Count + .UsedRange.Row - 1        
        LastCol = .UsedRange.Columns.Count + .UsedRange.Column - 1        
        Range(.Cells(LastRow, 1), .Cells(LastRow, LastCol)).Copy Destination:=.Cells(LastRow + 1, 1)    
End With
End Sub

Изменено: paff02.11.2018 13:55:42

 

ivanok_v2

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

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

paff,
с каким кодом вы работаете, своим или моим?

Изменено: ivanok_v202.11.2018 13:56:24

 

paff

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

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

#14

02.11.2018 13:57:53

я слишком туп для вашего кода((

Вот этот код мне подходит, но он копирует последнюю строку, а мне надо предпоследнюю строку копировать

Код
Sub Копировать_последнюю_строку()
   Dim LastRow&, LastCol&
   With ActiveSheet
   LastRow = .UsedRange.Rows.Count + .UsedRange.Row - 1
   LastCol = .UsedRange.Columns.Count + .UsedRange.Column - 1
   Range(.Cells(LastRow, 1), .Cells(LastRow, LastCol)).Copy Destination:=.Cells(LastRow + 1, 1)
   End With
End Sub

Изменено: paff02.11.2018 13:58:17

 

ivanok_v2

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

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

#15

02.11.2018 14:09:49

Код
Sub Копировать_последнюю_строку()
   Dim LastRow&, LastCol&
   With ActiveSheet
   LastRow = .UsedRange.Rows.Count + .UsedRange.Row - 2
   LastCol = .UsedRange.Columns.Count + .UsedRange.Column - 1
   Range(.Cells(LastRow, 1), .Cells(LastRow, LastCol)).Copy Destination:=.Cells(LastRow + 1, 1)
   End With
End Sub

Изменено: ivanok_v202.11.2018 14:10:11

 

paff

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

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

Спасибо Вам!! Все работает!, но упирается в объединенную ячейку которую надо все таки удалить!! Млин

 

paff

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

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

#17

02.11.2018 14:26:32

Все таки пытаюсь совместить Ваш код, с кодом который Вы мне отредактировали получается ерунда(
Private Function красным светится

Код
Public Sub addRow()
 Dim lRow&
 lRow& = lastRow(1, 2)
 Rows(lRow& & ":" & lRow&).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub
 
Private Function
   Dim lastRow&, LastCol&
   With ActiveSheet
   lastRow = .UsedRange.Rows.Count + .UsedRange.Row - 2
   LastCol = .UsedRange.Columns.Count + .UsedRange.Column - 1
   Range(.Cells(lastRow, 1), .Cells(lastRow, LastCol)).Copy Destination:=.Cells(lastRow + 1, 1)
   End With
End Function

Изменено: paff02.11.2018 14:27:16

 

ivanok_v2

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

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

#18

02.11.2018 14:27:40

Цитата
paff написал:
но упирается в объединенную ячейку которую надо все таки удалить!! Млин

тогда используйте мой код,что дал вам выше
там все просто и понятно

 

paff

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

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

Ваш я хочу использовать, но мое интеллектуальное развитие не может понять, что мне нужно вставить в те места, где вы сказали

 

paff

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

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

Начало поиска у меня ячейка А3, а стартовая строка — я не пойму что это

 

ivanok_v2

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

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

#21

02.11.2018 14:35:03

Код
Public Sub addRow()
 Dim lRow&
 lRow& = lastRow(3, 1)
 Rows(lRow& & ":" & lRow&).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub
 
Private Function lastRow(ByVal startRow&, findColumn&) As Long
    For lastRow = startRow& To 1000000
        If Cells(lastRow&, findColumn&) = "" Then Exit For
    Next
End Function

попробуйте так

Изменено: ivanok_v202.11.2018 14:35:21

 

paff

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

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

Уже лучше!! Он добавляет строки, но самую последнюю (объединенную так и не удаляет((

 

ivanok_v2

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

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

#23

02.11.2018 14:40:57

Цитата
paff написал:
объединенную так и не удаляет

вы говорили про добавление, про удаление ни слова не было.
а зачам вам ее удалять?

 

paff

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

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

АА кстати, Вы в сотый раз правы!!! Она съезжает вниз!! И ее можно не трогать!!

Тогда можно ли добавляет строки с форматом как в таблице??

туплю уже жестко((=

Изменено: paff02.11.2018 14:42:43

 

ivanok_v2

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

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

#25

02.11.2018 14:58:59

Цитата
paff написал:
Тогда можно ли добавляет строки с форматом как в таблице??

ну так так формат сохраняется.
или у вас по другому?

 

paff

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

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

Добавляет пустые строки, без формата.

Хотя в коде понял что за это отвечает строчка CopyOrigin:=xlFormatFromLeftOrAbove

 

ivanok_v2

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

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

#27

02.11.2018 15:09:24

Цитата
paff написал:
lRow& = lastRow(3, 1)

замените на

Код
lRow& = lastRow(3, 1)-1
 

paff

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

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

Теперь перед предпоследней строкой добавляет строчки , но с нужным форматом!! сейчас поиграюсь с этим -1

 

paff

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

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

Если ставить -2, то вставляет строки перед двумя нижними строками

 

ivanok_v2

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

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

#30

02.11.2018 15:22:33

paff,
Вам нужно перенести значение на строку выше

Добавление последней строки кнопкой (макрос)

NomaK

Дата: Вторник, 09.06.2020, 17:16 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Здравствуйте!
Есть таблица, есть кнопка, которая макросом добавляет новую строку снизу, в конце таблицы, пустую (с таким же стилем как и таблица). И сама кнопка тоже прыгает немного вниз, следом (для удобства).

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

И еще вопрос, поможете разобраться с макросом? Вот его часть
[vba]

Код

For i = 1 To 20
With Cells(Range(«Итоги»).Row — 1, i)
If Left(.Formula, 1) <> «=» Then .Clear
End With

Next

Range(«Итоги»).FormulaR1C1 = «=SUM(R4C:R[-1]C)»

[/vba]

Почему от 1 до 20 именно? и что за сумма «=SUM(R4C:R[-1]C)» ?

Хочу разобраться в этом.. Заранее благодарю!

К сообщению приложен файл:

1595824.xlsm
(20.5 Kb)

Сообщение отредактировал NomaKВторник, 09.06.2020, 17:17

 

Ответить

Pelena

Дата: Вторник, 09.06.2020, 19:26 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте.
Как вариант
[vba]

Код

Sub Макрос1()
    With Sheets(«Таблица»).ListObjects(«Таблица1»)
        .ListRows.Add
        ActiveSheet.Shapes(«Кнопка 3»).Top = .TotalsRowRange.Offset(1).Top
    End With
End Sub

[/vba]

К сообщению приложен файл:

3346968.xlsm
(22.5 Kb)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

RAN

Дата: Вторник, 09.06.2020, 21:25 |
Сообщение № 3

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

А можно и самопрыгающую кнопку сделать.

К сообщению приложен файл:

5603496.xlsm
(20.6 Kb)


Быть или не быть, вот в чем загвоздка!

 

Ответить

Pelena

Дата: Вторник, 09.06.2020, 21:36 |
Сообщение № 4

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Андрей, почему у меня так не получилось, хотя я пыталась?
Какая-то хитрость?


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

RAN

Дата: Вторник, 09.06.2020, 21:55 |
Сообщение № 5

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

«Черт возьми, Холмс! Но как??!!» :D
Сам случайно узнал. Где-то с месяц на Планете задавали вопрос, почему следующая таблица в файле смещается.
Убери «зло» с листа, перестанет работать.


Быть или не быть, вот в чем загвоздка!

 

Ответить

Pelena

Дата: Вторник, 09.06.2020, 22:08 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

А, вон оно как)
То есть зло тоже может быть полезным :)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

NomaK

Дата: Среда, 10.06.2020, 03:04 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Спасибо Вам! Вы лучшие!)

 

Ответить

NomaK

Дата: Среда, 10.06.2020, 03:58 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

А в чем отличие между Вашими вариантами?) по-моему все одинаково работает и кнопка отпрыгивает вниз и там и там

 

Ответить

NomaK

Дата: Среда, 10.06.2020, 04:58 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Ничего не получается если пытаюсь сделать пошагово сам то же самое.

Пример прилагаю со своей таблицей, к которой не могу приделать кнопку.

И еще пару вопросов, что за привязка к ячейке С12 в строке Range(«C12»).Select ?
И обязательно ли сохранять файл в xlsm?
При сохранении даже Вашего файла, постоянно пишет про какую то конфиденциальность, ок-отмена.. Как этого всего избежать

К сообщению приложен файл:

7456365.xlsx
(15.9 Kb)

 

Ответить

NomaK

Дата: Среда, 10.06.2020, 04:58 |
Сообщение № 10

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Макросы почему то не сохранились в примере

 

Ответить

Pelena

Дата: Среда, 10.06.2020, 08:18 |
Сообщение № 11

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

И обязательно ли сохранять файл в xlsm?

Обязательно, иначе

Макросы почему то не сохранились

А про

какую то конфиденциальность

можно почитать, например, здесь


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

NomaK

Дата: Среда, 10.06.2020, 08:39 |
Сообщение № 12

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

По пунктам сделал, но так и не смог сделать чтобы кнопка заработала. Показывает ошибку, в дебагере на строку (желытм выделяет)
With Sheets(«Таблица»).ListObjects(«Таблица1»)

Кнопка переименована на мою, таблица тоже. Почему не получается сделать то же самое но со своей таблицей, не понимаю.

 

Ответить

nilem

Дата: Среда, 10.06.2020, 10:22 |
Сообщение № 13

Группа: Авторы

Ранг: Старожил

Сообщений: 1612


Репутация:

563

±

Замечаний:
0% ±


Excel 2013, 2016

То есть зло тоже может быть полезным

Лена, не разрушайте принципы )
Кнопку переместите под таблицу и Формат объекта-Перемещать вместе с ячейками.


Яндекс.Деньги 4100159601573

 

Ответить

nilem

Дата: Среда, 10.06.2020, 10:27 |
Сообщение № 14

Группа: Авторы

Ранг: Старожил

Сообщений: 1612


Репутация:

563

±

Замечаний:
0% ±


Excel 2013, 2016

Почему не получается сделать то же самое

У вас таблица находится на листе Лист1. Так и надо записать в код:
[vba]

Код

Sheets(«Лист1»).ListObjects(«Таблица1»)

[/vba]
или
[vba]

Код

Sheets(«Лист1»).ListObjects(1)

[/vba]

К сообщению приложен файл:

7456365.xlsm
(23.1 Kb)


Яндекс.Деньги 4100159601573

 

Ответить

NomaK

Дата: Среда, 10.06.2020, 10:36 |
Сообщение № 15

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Благодарю! Такой простой макрос оказался, разобрался, всё работает!!

 

Ответить

Pelena

Дата: Среда, 10.06.2020, 15:46 |
Сообщение № 16

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Формат объекта-Перемещать вместе с ячейками

В том-то и дело, что с умными таблицами этот номер не прошел (у меня, по крайней мере)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

nilem

Дата: Среда, 10.06.2020, 16:20 |
Сообщение № 17

Группа: Авторы

Ранг: Старожил

Сообщений: 1612


Репутация:

563

±

Замечаний:
0% ±


Excel 2013, 2016

Давайте проверим для интереса. У меня работает в 2013 и 2016: кнопка смещается при добавлении строк и при удалении строк (удаление строк таблицы). А в какой версии не работает?
А то, может, зря про принципы )

К сообщению приложен файл:

6129994.xlsm
(22.6 Kb)


Яндекс.Деньги 4100159601573

 

Ответить

Pelena

Дата: Среда, 10.06.2020, 17:46 |
Сообщение № 18

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Сдаюсь :D
Я, видимо, пробовала так сделать, когда кнопка была левее таблицы, так, как хотел изначально ТС


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

nilem

Дата: Среда, 10.06.2020, 19:18 |
Сообщение № 19

Группа: Авторы

Ранг: Старожил

Сообщений: 1612


Репутация:

563

±

Замечаний:
0% ±


Excel 2013, 2016

[offtop]Ну нет, не сдавайтесь. Давайте скажем, что в 2003 это не работает.
Вот ведь, вечно у этой MS что-то не работает )[/offtop]


Яндекс.Деньги 4100159601573

 

Ответить

If you have no data below the table, you can just assign values to the rows immediately after the table. The table will automatically expand to encompass the new rows, as long as at least one cell in each row, has well defined data.

' Insert 3 new rows into the listoject
' We assume the ListObject already contains data
Public Sub Test(Lob As ListObject)
    Dim Sht As Worksheet
    Dim StartRow As Long, StartCol As Long, NumCols As Long
    Dim Lst As Variant
    Dim Rng As Range
    
    ' Allocate 3 new rows
    NumCols = Lob.ListColumns.Count
    ReDim Lst(1 to 3, 1 to NumCols)
    
    
    ' Get the first column of and the first row following the list table
    StartCol = Lob.Range.Column
    StartRow = Lob.Range.row + Lob.Range.Rows.Count
    
    ' Create a range big enough to hold the data, immediately under the last row of the table.
    Set Sht = Lob.Parent
    Set Rng = Sht.Cells(StartRow, StartCol).Resize(UBound(Lst), UBound(Lst, 2))
    
    ' Add some data to the new rows
    Lst(1, 1) = "Test1"
    Lst(2, 1) = "Test2"
    Lst(3, 1) = "Test3"
    
    ' Copy data to the destination
    Rng = Lst
End Sub

If the list object does not contain data, ie Lob.ListRows.Count = 0, then write data after the header otherwise write it after the last rows.

There are some mistakes in your code:

  • «Range(x , y)» will cause an error, when x and y are integers. If you want to refer to a cell. Try Cells(x, y). Or Range(Cells(x1, y1), Cells(x2, y2)) to refer to more cells.
  • And Resize() takes two arguments, and returns a range — it does not affect anything on the sheet.

See also how to insert rows if you want:

Excel Range.Insert:

Example from the doc:

With Range("B2:E5")
    .Insert xlShiftDown
    ' Optionally clear formats, which you do not want, if you add to
    ' a table with well defined data and formats.
    .ClearFormats
End With

The number of the rows inserted, will equal the number of rows in the range we call Insert on.

Содержание

  • Таблицы и объекты VBA

В этом руководстве будет показано, как работать с таблицами и объектами ListObject в VBA.

Таблицы — одна из самых полезных и мощных функций Excel. В этом руководстве мы рассмотрим, как использовать VBA для создания таблицы, добавления простой сортировки в таблицу, фильтрации таблицы и выполнения других задач, связанных с таблицами.

Создать таблицу с VBA

Метод ListObjects.Add может добавлять таблицу на лист на основе диапазона на этом листе. У нас есть диапазон, показанный в ($ A $ 1: $ B $ 8) на листе под названием Sheet1.

Следующий код добавит на ваш рабочий лист таблицу с именем Table1 в зависимости от диапазона ($ A $ 1: $ B $ 8) с использованием стиля таблицы по умолчанию:

123456 Подложка CreateTableInExcel ()ActiveWorkbook.Sheets («Sheet1»). ListObjects.Add (xlSrcRange, Range («$ A $ 1: $ B $ 8»),, xlYes) .Name = _»Таблица 1″Конец подписки

Результат:

Вставка столбца в конец таблицы с помощью VBA

Вы можете использовать метод ListColumns.Add, чтобы добавить столбец в конец вашей таблицы. У нас есть таблица под названием Table1, показанная ниже.

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

12345 Sub AddColumnToTheEndOfTheTable ()ActiveWorkbook.Sheets («Sheet1»). ListObjects («Table1»). ListColumns.AddКонец подписки

Результат:

Вставка строки внизу таблицы с помощью VBA

Вы можете использовать метод ListRows.Add, чтобы добавить строку в конец таблицы. У нас есть таблица под названием Table1, показанная ниже.

Следующий код всегда будет добавлять строку в конец таблицы.

12345 Подложка AddRowToTheBottomOfTheTable ()ActiveSheet.ListObjects («Таблица1»). ListRows.AddКонец подписки

Результат:

Добавление простой сортировки с помощью VBA

Вы можете отсортировать таблицу с помощью VBA. У нас есть таблица с именем Table1, показанная ниже, и мы можем использовать VBA для сортировки столбца продаж от самого низкого до самого высокого.

Следующий код отсортирует столбец «Продажи» в порядке возрастания.

12345678910111213141516171819 Sub SimpleSortOnTheTable ()Диапазон («Таблица1 [[# заголовков], [Продажи]]»). ВыберитеActiveWorkbook.Worksheets («Sheet1»). ListObjects («Table1»). Sort.SortFields.ClearActiveWorkbook.Worksheets («Sheet1»). ListObjects («Table1»). Sort.SortFields.Add _Ключ: = Диапазон («Таблица1 [[# Все], [Продажи]]»), SortOn: = xlSortOnValues, Order: = _xlAscending, DataOption: = xlSortNormalС ActiveWorkbook.Worksheets («Sheet1»). ListObjects («Table1»). Sort.Header = xlYes.MatchCase = Ложь.Orientation = xlTopToBottom.SortMethod = xlPinYin.Подать заявлениеКонец сКонец подписки

Результат:

Фильтрация таблицы с помощью VBA

Вы также можете фильтровать таблицу Excel с помощью VBA. У нас есть таблица с именем Table1, и мы хотели бы отфильтровать ее, чтобы отображались только продажи, превышающие 1500.

Мы можем использовать метод автофильтра, который имеет пять необязательных параметров. Поскольку мы хотим отфильтровать столбец «Продажи», который является вторым столбцом, мы устанавливаем для поля значение 2 и используем параметр оператора xlAnd, который используется для дат и чисел.

123456 Подложка SimpleFilter ()ActiveWorkbook.Sheets («Sheet1»). ListObjects («Table1″). Range.AutoFilter Field: = 2, Criteria1: = _»> 1500″, оператор: = xlAndКонец подписки

Результат:

Очистите фильтр с помощью метода ShowAllData в VBA

Вы можете получить доступ к методу ShowAllData класса Worksheet, чтобы очистить фильтр. Если вы хотите очистить фильтр (-ы) таблицы, вам сначала нужно выбрать ячейку в таблице, что вы можете сделать в VBA.

Метод ShowAllData сгенерирует ошибку, если не использовать условную логику, чтобы проверить, был ли применен фильтр на листе. В следующем коде показано, как это сделать:

123456789 Sub ClearingTheFilter ()Диапазон («Таблица1 [[# заголовков], [Продажи]]»). ВыберитеЕсли ActiveWorkbook.Worksheets («Sheet1»). FilterMode = True, тоActiveSheet.ShowAllDataКонец, еслиКонец подписки

Очистить все фильтры из таблицы Excel

Вы можете получить доступ к методу ShowAllData класса ListObject, не выбирая сначала ячейку в таблице. В следующем коде показано, как это сделать:

123 Подложка ClearAllTableFilters ()ActiveWorkbook.Worksheets («Sheet1»). ListObjects («Table1»). AutoFilter.ShowAllDataКонец подписки

Удаление строки с помощью VBA

Вы можете удалить строку в базе данных вашей таблицы с помощью метода ListRows.Delete. Вы должны указать, какая строка используется по номеру строки. У нас есть следующая таблица под названием Table1.

Допустим, вы хотите удалить вторую строку в базе данных вашей таблицы, следующий код позволит вам это сделать:

12345 Sub DeleteARow ()ActiveWorkbook.Worksheets («Sheet1»). ListObjects («Table1»). ListRows (2) .DeleteКонец подписки

Результат:

Удаление столбца с помощью VBA

Вы можете удалить столбец из таблицы с помощью метода ListColumns.Delete. У нас есть следующая таблица под названием Table1, показанная ниже:

Чтобы удалить первый столбец, вы должны использовать следующий код:

12345 Подраздел DeleteAColumn ()ActiveWorkbook.Worksheets («Sheet1»). ListObjects («Table1»). ListColumns (1) .DeleteКонец подписки

Результат:

Преобразование таблицы обратно в диапазон в VBA

Вы можете преобразовать таблицу обратно в нормальный диапазон с помощью VBA. В следующем коде показано, как преобразовать таблицу с именем Table1 обратно в диапазон:

12345 Sub ConvertingATableBackToANormalRange ()ActiveWorkbook.Sheets («Sheet1»). ListObjects («Table1»). UnlistКонец подписки

Добавление чередующихся столбцов и форматирование ко всем таблицам на листе с помощью VBA

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

12345678910111213 Sub AddingBandedColumns ()Dim tbl As ListObjectТусклый лист как рабочий листУстановить sht = ThisWorkbook.ActiveSheetДля каждой табл. В шт.ListObjectstbl.ShowTableStyleColumnStripes = Истинаtbl.DataBodyRange.Font.Bold = ИстинаСледующая таблицаКонец подписки

Результат:

Создание таблицы в Access в VBA с использованием DoCmd.RunSQL

Одним из основных способов создания таблицы в Access в VBA является использование метода DoCmd.RunSQL для выполнения запроса действия с оператором SQL.

У нас есть кнопка в нашем образце формы, и когда мы нажимаем на кнопку, мы хотим создать таблицу с именем ProductsTable с двумя полями или столбцами, одно будет полем первичного ключа с именем ProductsID, а другое будет полем с именем Sales.

Чтобы создать эту таблицу, мы будем использовать следующий код:

123456 Частная подпрограмма cmdCreateProductsTable_Click ()DoCmd.RunSQL «СОЗДАТЬ ТАБЛИЦУ ProductsTable» _& «(ProductID INTEGER PRIMARY KEY, целое число продаж);»Конец подписки

Результат:

Фильтрация таблицы в доступе с помощью VBA

Вы также можете фильтровать таблицу в Access с помощью метода DoCmd.ApplyFilter. У нас есть наша простая таблица, показанная ниже в Access, которая называется ProductsTable.

Мы хотели бы нажать эту кнопку в нашей форме, и тогда мы увидим только продажи, превышающие 1500.

Итак, мы бы использовали следующий код для этого:

1234567 Частная подпрограмма cmdFilter_Click ()DoCmd.OpenTable «ProductsTable»DoCmd.ApplyFilter, «[Продажи]> 1500»Конец подписки

Результат:

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Excel как добавить строки на delphi
  • Excel как добавить сортировку в столбце
  • Excel как добавить символы слева
  • Excel как добавить символ к значению ячейки
  • Excel как добавить свою нумерацию страниц

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии