Excel VBA До колонки E - PullRequest
       1

Excel VBA До колонки E

0 голосов
/ 27 декабря 2018

У меня есть код для копирования диапазона (D9: E31) со всем форматированием и границами, а также объединенными ячейками (D9: E9).Когда пользователь нажимает кнопку Диапазон (D9: E31) копируется в следующие доступные ячейки Диапазон (F9: G31), Диапазон (H9: I31) и т. Д.

Я разработал код для удаления скопированных ячеек в обратном порядке.Range (H9: 31), Range (F9: G31) ... Однако мои основные данные находятся в Range (D9: E31), поэтому их не следует удалять ни при каких обстоятельствах.

Как заставить мой код работать до столбца E. Как только он достигнет столбца E, он должен перестать работать, и кнопка не должна делать ничего, независимо от того, сколько раз она нажата.Я могу добавить предупреждение сам позже.

Я пытался Do Until безуспешно.Однако мне не нужно выполнять цикл до столбца E. Мне нужно запускать VBA каждый раз, когда я нажимаю кнопку.Используя цикл, он будет удалять все до столбца E?Может быть, в этом случае следует использовать If?Если следующая ячейка отсутствует в столбце E, запустить код?

Мой код:

        Sub Remove()
    With Worksheets("Price calculation")
'Do Until Columns(4)
        lc = .Cells(9, .Columns.Count).End(xlToLeft).Column
        .Range(.Cells(9, lc - 0), .Cells(9, lc)).MergeArea.UnMerge
        lc = .Cells(11, .Columns.Count).End(xlToLeft).Column
        .Range(.Cells(9, lc - 1), .Cells(31, lc)).ClearContents
        .Range(.Cells(9, lc - 1), .Cells(31, lc)).Interior.ColorIndex = 2
        .Range(.Cells(9, lc - 1), .Cells(31, lc)).Borders.LineStyle = xlNone
    End With
    End Sub

Ответы [ 4 ]

0 голосов
/ 27 декабря 2018

Очистить содержимое объединенных столбцов

Поскольку неясно, хотите ли вы удалить все или одно за другим, я включил оба.

Один за другим

Каждый раз, когда вы запускаете это, последний диапазон из 2 столбцов «удаляется», если он есть.

Sub RemoveOneByOne()
    Dim lc As Integer
    With Worksheets("Price calculation")
        lc = .Cells(9, .Columns.Count).End(xlToLeft).Column + 1
        If lc > 5 Then
            With .Range(.Cells(9, lc - 1), .Cells(31, lc))
                .UnMerge
                .ClearContents
                .Interior.ColorIndex = 2
                .Borders.LineStyle = xlNone
            End With
        End If
    End With
End Sub

Все

Каждый раз, когда вы запускаете это, все диапазоны из 2 столбцов«удалены», если таковые имеются.

Sub RemoveAll()
    Dim lc As Integer
    With Worksheets("Price calculation")
        lc = .Cells(9, .Columns.Count).End(xlToLeft).Column + 1
        With .Range(.Cells(9, 6), .Cells(31, lc))
            .UnMerge
            .ClearContents
            .Interior.ColorIndex = 2
            .Borders.LineStyle = xlNone
        End With
    End With
End Sub
0 голосов
/ 27 декабря 2018

Ниже приведены некоторые рекомендации по циклическому выполнению до столбца E. Код столбцов цикла и импорт значения Test из столбца A в столбец E.

Option Explicit

    Sub test()

        Dim i As Long

        i = 1

        Do Until i = 6
            Sheet1.Cells(1, i).Value = "Test"

        i = i + 1

        Loop

    End Sub
0 голосов
/ 27 декабря 2018

Попробуйте

Sub Remove()


    With Worksheets("Price calculation")
    'Do Until Columns(4)
        Do
            lc = .Cells(9, .Columns.Count).End(xlToLeft).Column

            If lc <= 4 Then Exit Do

            .Range(.Cells(9, lc - 0), .Cells(9, lc)).MergeArea.UnMerge
            lc = .Cells(11, .Columns.Count).End(xlToLeft).Column
            .Range(.Cells(9, lc - 1), .Cells(31, lc)).ClearContents
            .Range(.Cells(9, lc - 1), .Cells(31, lc)).Interior.ColorIndex = 2
            .Range(.Cells(9, lc - 1), .Cells(31, lc)).Borders.LineStyle = xlNone
        Loop
    End With
End Sub
0 голосов
/ 27 декабря 2018

Вы забыли про Loop слово в конце цикла.

Do Until condition
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop

Do
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop Until condition

Для вашей ситуации:

sub deleteCol()
    dim i as long
    i = 100 'index of last column, which u want to delete
    do until i = 4
        columns(i).delete
    loop 
end sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...