2015-08-06 2 views
0

У меня есть код, который предназначен для циклического преобразования каждой ячейки в строке и удаления их КРОМЕ для столбцов A и O. Когда я запускаю этот код, он удаляет только второй столбец.Очистка содержимого строки с петлей

Я знаю строку «Строки (Target.Row) .ClearContents», но это не подходит для моих целей, так как мне нужны конкретные столбцы, чтобы они оставались неповрежденными.

Dim i As Integer 

For i = 2 To i = 30 
    If i = 15 Then 
     'update i but do nothing 
     i = i + 1 
    Else 
     'update i and clear contents of cell 
     .Cells(Target.Row, i).Clear 
     i = i + 1 
    End If 
Next     

ответ

2

для цикла увеличивает я так не должен, и этот синтаксис неверен For i = 2 To i = 30:

Dim i As Long 

For i = 2 To 30 
    If i <> 15 Then .Cells(Target.Row, i).Clear 
Next 

Более быстрый способ, чтобы исключить определенные столбцы из строки (без использования цикла):

With Target.Parent 
    .Columns(15).Hidden = True 
    .UsedRange.Rows(Target.Row).SpecialCells(xlCellTypeVisible).Clear 
    .Columns(15).Hidden = False 
End With 
+0

Спасибо! Я не знал, что для петель автоматически увеличивается в VBA. Я так привык делать это вручную на C++. Как только он позволит мне принять ваш ответ, я это сделаю. Спасибо. – Jason

1

Зачем использовать петли вообще?

Union(Range(.Cells(Target.Row,2),.Cells(Target.Row,14)), Range(.Cells(Target.Row,16),.Cells(Target.Row,30))).Clear 
+0

И адресная версия: «Range (« B »& target.Row &»: N »& target.Row &", P "& target.Row &": AD "& target.Row &" ") .ClearContents' То же самое (следовательно, почему я прокомментировал, а не отвечу), чуть легче понять, когда просматриваете код. –

+0

Интересный способ обойти это. Наверное, я просто использую циклы, потому что мне легче думать, но это тоже должно работать. Я должен сказать, что не рекомендуется читать эту строку кода, тогда как цикл намного чище. – Jason

Смежные вопросы