Есть ли способ удалить текущий диапазон, выбранный в VBA? - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь выбрать определенный диапазон c данных и удалить только те ячейки, которые я идентифицирую, а не всю строку.

Я включил кодировку, которая у меня есть в настоящее время. Я пытаюсь выделить все слева от указанной ячейки, удалить диапазон и сдвинуть все ячейки вверх. Я не могу ввести указанный диапазон c (ie. Range ("B3: B7"). Delete, et c.), Так как диапазон будет изменяться во всем коде. Мне нужно, чтобы это был динамический диапазон c, который будет изменяться по мере выполнения кода.

  Worksheets("Sheet1").Select
    Cells(2, 6).Select

    ActiveCell.Offset(0, 1).Select
    col = ActiveCell.Column
    row = ActiveCell.Row

    Cells(row, col).Select
    Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
    Range.Delete Shift:=xlToUp

Дайте мне знать, если вам нужна дополнительная информация. Код будет работать до тех пор, пока я не достигну последней строки (Range.Delete).

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Я думаю, это то, что вы ищете. Когда вы выбираете одну отдельную ячейку, эта строка кода выберет диапазон от столбца A и активной строки до активного столбца + 1 в активной строке.

 ThisWorkbook.Sheets("Sheet1").Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, ActiveCell.Column + 1)).Delete
0 голосов
/ 14 января 2020

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

Dim xrng As Range
Dim rngholder As Range
Dim xArray(0 To 20) As Variant
Dim x As Integer 

Set xrng = Application.Selection
Set xrng = Application.InputBox("Title", "Make a selection", xrng.Address, Type:=8)
    x = 0
'If xrng = "" Then Exit Sub

For Each rngholder In ActiveSheet.Range(xrng.Address)

    If rngholder.Value > "" Then
        xArray(x) = VBA.Trim(rngholder.Value)
    Else
    End If
x = x + 1
Next rngholder

В этом случае поле ввода загружается с активной ячейкой или независимо от того, какой выбор был при вызове макроса и диапазон заполняется в массив. Где вы можете настроить , это в строке set 'xrng =' line. Я бы поставил 'set xrng = logi c, чтобы получить тот выбор, который вы описали, чтобы все было слева и вверх, и удалил его.

edit:

Set xrng = Range(ActiveCell, Range(ActiveCell.End(xlToLeft), ActiveCell.End(xlUp))).Select

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...