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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2013, 16:17   #1
Робин
Форумчанин
 
Регистрация: 03.04.2010
Сообщений: 118
По умолчанию Макрос для удаления заполненой строки таблицы, поправить

Добрый день
Ув, макрописцы! Гляньте пожалуйста, что в этом макросе сделано неправильно?
Макрос «УдалениеСтроки3», должен кажды раз, удалять только одну заполненную строку, именно, из таблицы. И, именно строку, на которой установлен курсор.
А если курсор находится на пустых ячейках: выше, ниже или справа таблицы, выдает сообщение «Вставте курсор в удаляемую строку таблицы». И саму активную строку не удаляет.
В настоящий момент, макрос свою основную задачу, выполняет, Но допускает две существенные ошибки.
1) При нахождении курсора на удаляемой строке внутри таблицы, сначала выдает нежелательное, в таком случае, сообщение «Вставте курсор в удаляемую строку таблицы», И, только после снятия этого сообщения, начинает процесс удаления активной строки.
2) Причем, удаляет ее и тогда, когда курсор стоит на пустой ячейке удаляемой строки, справа от таблицы, что также нежелательно.
Как избежать этих ошибок?
Причем, вариант с применением именованного диапазона, я знаю, но он мне не подходит
Вложения
Тип файла: rar код .rar (25.1 Кб, 15 просмотров)

Последний раз редактировалось Робин; 13.03.2013 в 16:37.
Робин вне форума Ответить с цитированием
Старый 13.03.2013, 16:38   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
Sub d()
  If Intersect(ActiveSheet.[A3].CurrentRegion, Selection) Is Nothing Then
    MsgBox "Вставьте курсор в удаляемую строку таблицы"
  Else
    S1 = IIf(Selection.Rows.Count > 1, "Удалить строки с данными: ", "Удалить строку с данными: ")
    S2 = IIf(Selection.Rows.Count > 1, "Строк удалено: " & Selection.Rows.Count, "Строка удалена!")
    If MsgBox(S1 & Selection.EntireRow.Address, vbYesNo, "Удаление строки") = vbYes Then
      Application.ScreenUpdating = False
      Selection.EntireRow.Delete xlShiftUp
      Application.ScreenUpdating = True
      MsgBox S2, 64, ""
    End If
  End If
End Sub
попробуйте так сделать. удаляет все выделенные строки.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 13.03.2013, 17:35   #3
Робин
Форумчанин
 
Регистрация: 03.04.2010
Сообщений: 118
По умолчанию

Хороший макрос. Пригодится в будушем. Спасибо.
А сейчас мне надо удалять только одну строку.
И, чтобы в окошке, отображалось содержимое активной ячейки, а не номер удаляемой строки.
Робин вне форума Ответить с цитированием
Старый 13.03.2013, 17:37   #4
Робин
Форумчанин
 
Регистрация: 03.04.2010
Сообщений: 118
По умолчанию

Хороший макрос. Пригодится в будушем. Спасибо.
А сейчас мне надо удалять только одну строку.
И, чтобы в окошке, отображалось содержимое активной ячейки, а не номер удаляемой строки.
Робин вне форума Ответить с цитированием
Старый 14.03.2013, 08:27   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
Sub d()
  If Intersect(ActiveSheet.[A3].CurrentRegion, ActiveCell) Is Nothing Then
    MsgBox "Вставьте курсор в удаляемую строку таблицы"
  Else
    If MsgBox("Удалить строку с данными: " & ActiveCell, vbYesNo, "Удаление строки") = vbYes Then
      Application.ScreenUpdating = False
      ActiveCell.EntireRow.Delete xlShiftUp
      Application.ScreenUpdating = True
      MsgBox "Строка удалена!", 64, ""
    End If
  End If
End Sub
это же несложно - по-сути, удалить пару строк...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 14.03.2013, 11:31   #6
Робин
Форумчанин
 
Регистрация: 03.04.2010
Сообщений: 118
По умолчанию

Добрый день
DiemonStar еще раз СПАСИБо. Работает.
А сам я вчера, вот так сделал

Sub УдалитьСтроку()
If Intersect(ActiveSheet.[A3].CurrentRegion, Selection) Is Nothing Then
MsgBox "Вставьте курсор в удаляемую строку таблицы"
Else
If MsgBox("Удалить строку с данными: " & ActiveCell.Value, vbYesNo, "Удаление строки") = vbNo Then Exit Sub 'GoTo 20
Application.ScreenUpdating = False
Selection.EntireRow.Delete xlShiftUp
Application.ScreenUpdating = True
MsgBox "Рядок видалений!", 64, ""
End If
End Sub
Не совсем уверен что правильно, но тоже работает.
И обнаружил маленький недостаток.
На шапке таблицы удаление тоже срабатывает. Но с этим можна мириться.
Робин вне форума Ответить с цитированием
Старый 14.03.2013, 11:51   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Не совсем уверен что правильно, но тоже работает.
Тоже как вариант. Но я бы так делать не стал - при варианте выбора vbYesNoCancel в случае нажатия "Отменить" удаление все-равно выполнится. Выигрыша от Exit Sub при этом вы не получите - в случае неравенства vbYes переход будет все-равно на выход из функции (про использование GoTo вообще молчу).

Цитата:
И обнаружил маленький недостаток.
На шапке таблицы удаление тоже срабатывает. Но с этим можна мириться.
Тут можете либо воспользоваться форматированием как таблицы и искать пересечение не с текущей областью (ActiveSheet.[A3].CurrentRegion), а с областью данных таблицы: ActiveSheet.Range("Таблица1"). Или сделать свой именованный диапазон и искать пересечения с ним.

И еще одно замечание - используя Selection у вас будут удаляться и проверяться несколько строк. Попробуйте выделить не одну ячейку , а область, и у посмотрите на результат. Нужно использовать либо Selection.Rows(1), либо ActiveCell (что проще), либо Selection.Cells(1,1)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 14.03.2013, 13:43   #8
Робин
Форумчанин
 
Регистрация: 03.04.2010
Сообщений: 118
По умолчанию

Ув. DiemonStar, главное понял.Остается только запрмнить нюансы. Думаю что с практическим опытом, все станет на свои места.
Еще раз большое вам СПАСИБО за быструю и качественную помощь!
Робин вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для удаления строки julius Microsoft Office Excel 28 03.10.2014 00:19
макрос Excel для удаления не нужных значений в солбце kroshik Помощь студентам 0 24.12.2012 06:32
Макрос для удаления ненужной части строки Nikita Bash Microsoft Office Excel 2 09.06.2012 08:18
макрос для удаления строк??? mixa2997510 Microsoft Office Excel 3 21.05.2012 13:38
Макрос для удаления повторяющихся строк Jelena_bsb Microsoft Office Excel 3 05.08.2010 13:34