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