Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2009, 08:05   #1
inside9
 
Регистрация: 07.08.2009
Сообщений: 5
По умолчанию Добавление (удаление) строк в таблице

Добрый день! У меня возникла вот такая проблема: я создал на листе две кнопки добавление строки к таблице (копированием)и удаление строки, записал макрос:
Sub ДобавлениеСтроки()
Rows("50:50").Select
Selection.Copy
Rows("51:51").Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False
End Sub
Sub УдалениеСтроки()
Rows("51:51").Select
Selection.Delete Shift:=xlUp
Range("C51").Select
End Sub
Но как сделать, чтобы макрос добавлял строки к последней строке таблицы и удалял последнюю строку таблицы (а не 50 и 51 соответственно как в приведённом коде макроса)!? С уважением, Роман!
inside9 вне форума Ответить с цитированием
Старый 11.08.2009, 08:21   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А что значит последняя строка таблицы? Это можно понимать по разному. Если, например, последней строкой считать последнюю заполненную ячейку в столбце "A", то можно так:
Код:
Sub Добавление()
    Dim i As Long: Application.ScreenUpdating = False
    i = Cells(Rows.Count, 1).End(xlUp).Row
    Rows(i).Copy Rows(i + 1)
End Sub

 Sub Удаление()
    Rows(Cells(Rows.Count, 1).End(xlUp).Row).Delete
 End Sub
А если по другому, то опишите подробнее. Под Вашей таблицей есть еще данные?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 11.08.2009, 09:02   #3
inside9
 
Регистрация: 07.08.2009
Сообщений: 5
По умолчанию

Под таблицей нету данных больше. А вот последняя строка может быть незаполненной
inside9 вне форума Ответить с цитированием
Старый 11.08.2009, 09:08   #4
inside9
 
Регистрация: 07.08.2009
Сообщений: 5
По умолчанию

Как программно определить последнюю строку таблицы (даже если она не заполненная)
inside9 вне форума Ответить с цитированием
Старый 11.08.2009, 09:53   #5
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Код:
Dim lLastRow as long
lLastRow = ActiveSheet.Cells.SpecialCells(xlLastCell).Row
Самая последняя ячейка на листе. Правда не показывает неверный результат при использовании фильтра. А вот такой вариант работатет и при фильтре.
Код:
lLastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
Но в обоих случаях, если даже нет данных в ячейке, но к ней было применено форматирование, либо она использовалась ранее, то такая ячейка учитывается.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 11.08.2009, 12:00   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Во-первых, способ, предложенный The_Prist, не будет работать корректно, если, например, есть заливка ячеек, или прорисованы границы ячеек ниже, чем строка, содержащая данные. Т.к. метод .UsedRange такие строки учитывает.
Во-вторых, если,все-таки, нужно определить последнюю заполненную строку таблицы, не зависимо от номера столбца, то можно поступить, например, так:
Код:
Sub Добавление()
    Dim i As Long: Application.ScreenUpdating = False
    For i = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 To 1 Step -1
        If Rows(i).Text = "" Then Else Exit For
    Next
    Rows(i).Copy Rows(i + 1)
End Sub

Sub Удаление()
    Dim i As Long: Application.ScreenUpdating = False
    For i = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 To 1 Step -1
        If Rows(i).Text = "" Then Else Exit For
    Next
    Rows(i).Delete
End Sub
В-третьих, ответа на вопрос
Цитата:
Как программно определить последнюю строку таблицы (даже если она не заполненная)
Вы не дождетесь до тех пор, пока однозначно не скажите, что в Вашем случае значит "последняя строка таблицы".
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 11.08.2009, 12:40   #7
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Во-первых, способ, предложенный The_Prist, не будет работать корректно, если, например, есть заливка ячеек, или прорисованы границы ячеек ниже, чем строка, содержащая данные. Т.к. метод .UsedRange такие строки учитывает.
При всем уважении, я этот момент описал в своем посте. Последние две строчки.
Цитата:
Сообщение от The_Prist;
Но в обоих случаях, если даже нет данных в ячейке, но к ней было применено форматирование, либо она использовалась ранее, то такая ячейка учитывается.
А предложил эти два варианта именно поэтому
Цитата:
Сообщение от inside9;
Как программно определить последнюю строку таблицы (даже если она не заполненная)
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 11.08.2009, 13:05   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

The_Prist.
Не в обиду. Я просто пояснил эти Ваши две строчки. Но, похоже на то, что вопрос, что такое конец таблицы (даже не заполненной), нас с Вами интересует больше, чем автора темы.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 11.08.2009, 14:00   #9
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Не в обиду.
Да какие там обиды, было бы из-за чего. Я тоже просто пояснил причину указания именно этих двух способов.
Цитата:
Сообщение от SAS888 Посмотреть сообщение
нас с Вами интересует больше, чем автора темы.
Полностью согласен.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 13.11.2010, 12:35   #10
ILF_ollie
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 21
По умолчанию

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

Имеем в файле MS Excel 2007 таблицу, названную "Таблица1"
Нижняя строка - строка итогов.
В данной таблице заполнены все строки.
Необходимо добавить еще одну строку, перед итоговой строкой, для того чтобы продолжить заполнять таблицу.
Нажимаешь кнопочку на экране - появляется пустая строка. Какой макрос для этого необходим?
ILF_ollie вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление данных из Delphi в таблице Excel Neket21 БД в Delphi 1 23.07.2009 08:06
добавление в таблице CJartem Помощь студентам 0 25.04.2009 12:20
добавление строки в таблице nikleb JavaScript, Ajax 14 09.03.2009 13:27
Удаление/добавление полей runtime /Denis/ БД в Delphi 1 06.08.2008 22:35
Добавление и удаление записей в Listview Scorpeon Компоненты Delphi 0 08.06.2007 23:09