我有一个代码,用于复制具有所有格式和边框的Range(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

最佳答案

合并列的ClearContents

由于尚不清楚您是否要全部删除或一一删除,因此我将两者都包括在内。

一对一

每次运行此命令时,都会删除“最后一个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

10-08 09:01