Страницы: 1
RSS
Удаление последней строки макросом, Разбираемся с правильным использованием переменных
 
Необходимо найти в заданном файле последнюю непустую строку, содержащую данные или формулу, и удалить её.
Код
CountStr = ActiveCell.SpecialCells(xlLastCell).Row ' Считаем количесство рядов
Rows("CountStr:CountStr").Select ' ВЫДЕЛЯЕМ  СТРОКУ с номером CountStr, здесь неправильно использована переменная
Selection.Delete Shift:=xlUp ' УДАЛЯЕМ выделенную СТРОКУ С ПОДНЯТИЕМ

версия Excel 2016
 
Код
Sub DeleteLastRow()
Dim lRws As Long
    With Лист1
        lRws = .UsedRange.Rows.Count - .UsedRange.Row + 1 ' последняя срока
        .Rows(lRws).Delete ' удаляем
    End With
End Sub

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

Если нужна заполненная строка, можно определить по одному из столбцов:
Код
 lRws = .Cells(.UsedRange.Rows.Count, "A").End(xlUp).Row
 
вообще-то xlLastCell это  "последняя непустая строка, содержащая" не только "данные или формулу", но и много чего ещё...
Код
Sub tt()
    Dim r As Range
    Set r = [a1].CurrentRegion
    r.Rows(r.Rows.Count).Delete
End Sub
Изменено: Hugo - 08.05.2016 14:29:46
 
Hugo, спасибо, за рабочий код
 
Вопрос по моему не работающему примеру:
Код
CountStr = ActiveCell.SpecialCells(xlLastCell).Row

Правильно создана переменная, и присвоится в данной ситуации ей значение?
Код
Rows("CountStr:CountStr").Select

Правильно подставлена переменная в формулу?
 
Нет, у Вас текст.
Код
Rows(CountStr & ":"& CountStr).Select
Rows(CountStr).Select
 
Доброго время суток, подскажите пожалуйста, как удалить созданную строку?
Я сделал так чтоб с файла снималась защита, затем добавлялась строка в таблицу, после опять ставилась защита
Помогите сделать то же самое только чтобы можно было удалить последнюю строку, но чтоб вылазило подтверждение что "Действительно удалить данные?"
Буду очень сильно благодарен, а то много информации нашел, но не знаю как применить ее к своему коду

Вот код

Код
Option Explicit

Dim ShSales As Worksheet ' Лист продажи
Dim SalesListObj As ListObject
Dim SalesListRow As ListRow

Sub AddSales() ' Добавление новой строки
    Set ShSales = ThisWorkbook.Worksheets("Продажи")
    Set SalesListObj = ShSales.ListObjects("Продажи_tb")
    ShSales.Unprotect Password:="0000"
    Set SalesListRow = SalesListObj.ListRows.Add
    ShSales.Protect Password:="0000"
End Sub
 
Перменные вынесены на уровень модуля - так надо? Если больше нигде не применяются поместите в процедуре, после Sub AddSales(). Хотя, если только здесь, то не нужны.

Код
Sub AddSales()
    If MsgBox("Хотите добавить строку?", 64 + vbYesNo, "") = vbNo Then Exit Sub
    
    With ThisWorkbook.Worksheets("Продажи")
        .Unprotect Password:="0000"
        .ListObjects("Продажи_tb").ListRows.Add
        .Protect Password:="0000"
    End With
End Sub

А удалить - Delete
 
Цитата
vikttur написал:
А удалить - Delete
Delite вместо Add?
Просто я пробовал, он говорит нет такой функции
 
Коллеги по чату, помогите пожалуйста написать код на удаление строки подобный этому, не могу понять куда мне вписать Delete.
А я посмотрю по примеру и буду знать. Просто я в VBA всего пару дней, пока только начинаю.

Вот сам код на добавление строки
Код
Option Explicit 
Dim ShSales As Worksheet ' Лист продажи
Dim SalesListObj As ListObject
Dim SalesListRow As ListRow
 
Sub AddSales() ' Добавление новой строки
    Set ShSales = ThisWorkbook.Worksheets("Продажи")
    Set SalesListObj = ShSales.ListObjects("Продажи_tb")
    ShSales.Unprotect Password:="0000"
    Set SalesListRow = SalesListObj.ListRows.Add
    ShSales.Protect Password:="0000"
End Sub

Большое спасибо за помощь!
 
Для удаления последней строки:
Код
Sub Del_Last_Row()' Удаление последней строки
   Dim myRowCount As Long
   Set ShSales = ThisWorkbook.Worksheets("Продажи")
   Set SalesListObj = ShSales.ListObjects("Продажи_tb")
   myRowCount = SalesListObj.ListRows.Count
   ShSales.Unprotect Password:="0000"
   SalesListObj.ListRows(myRowCount).Delete
   ShSales.Protect Password:="0000"
End Sub
PS
Если у Вас объектные переменные объявлены вне процедуры, и всегда сначала строки добавляются, то нет смысла их объявлять снова. Тогда код будет такой:
Код
Sub Del_Last_Row()' Удаление последней строки   
   Dim myRowCount As Long
   myRowCount = SalesListObj.ListRows.Count
   ShSales.Unprotect Password:="0000"
   SalesListObj.ListRows(myRowCount).Delete
   ShSales.Protect Password:="0000"
End Sub
Изменено: Михаил Лебедев - 18.02.2020 05:27:25
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Jack London написал:
Delite вместо Add? Просто я пробовал, он говорит нет такой функции
Цитата
vikttur написал:
А удалить - Delete
Delite <> Delete
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Михаил Лебедев написал:
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
Цитата подстать

Спасибо большое за помощь все работает
Страницы: 1
Наверх