2013-08-28 2 views
0

Как изменить макрос так, чтобы он удалял список столбцов, так как он теперь работает, он удаляет все, что не входит в столбец.Как изменить макрос, чтобы удалить «список имени столбца» из списка «Удалить все, кроме списка»

Я попытался, но не смог его получить.

Благодаря

Sub DeleteColumns() 

Dim ws As Worksheet 
Dim ColList As String, ColArray() As String 
Dim LastCol As Long, i As Long, j As Long 
Dim boolFound As Boolean 
Dim delCols As Range 

On Error GoTo Whoa 

Application.ScreenUpdating = False 

'~~> Set your sheet here 
Set ws = Sheets("360") 

'~~> List of columns you want to keep. You can keep adding or deleting from this. 
'~~> Just ensure that the column names are separated by a COMMA 
'~~> The names below can be in any case. It doesn't matter 
ColList = "{TOKEN:ATTRIBUTE_3}, {TOKEN:ATTRIBUTE_4}" 

'~~> Create an array for comparision 
ColArray = Split(ColList, ",") 

'~~> Get the last column 
LastCol = ws.Cells.Find(What:="*", After:=ws.Range("A1"), Lookat:=xlPart, _ 
LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _ 
MatchCase:=False).Column 

'~~> Loop through the Cols. Since there are only 100 Columns 
'~~> I am not using .Find and .FindNext 
'~~> If you are interested in learning how .Find and .Findnext 
'~~> works then see this link 
'~~> http://siddharthrout.wordpress.com/2011/07/14/find-and-findnext-in-excel-vba/ 
For i = 1 To LastCol 
    boolFound = False 
    '~~> Checking of the current cell value is present in the array 
    For j = LBound(ColArray) To UBound(ColArray) 
     If UCase(Trim(ws.Cells(1, i).Value)) = UCase(Trim(ColArray(j))) Then 
      '~~> Match Found 
      boolFound = True 
      Exit For 
     End If 
    Next 
    '~~> If not match not found 
    If boolFound = False Then 
     If delCols Is Nothing Then 
      Set delCols = ws.Columns(i) 
     Else 
      Set delCols = Union(delCols, ws.Columns(i)) 
     End If 
    End If 
Next i 

'~~> Act on columns 
If Not delCols Is Nothing Then delCols.Delete 

LetsContinue: 
    Application.ScreenUpdating = True 
    Exit Sub 
Whoa: 
    MsgBox Err.Description 
    Resume LetsContinue 

End Sub

ответ

1

не просто изменить бы эту линию

If boolFound = False Then 

Для проверки наличия Правда вместо этого?

If boolFound = True Then 
+0

Благодарим за отзыв. Я попробовал ваше предложение, но не работал. – xyz

+0

«не работает» ничего нам не говорит. Что вы имеете в виду? Исходный код ищет любой столбец, который ** не является ** частью ColArray. Он проверяет это с помощью переменной boolFound, а затем ищет, является ли boolFound False. Изменив это, чтобы проверить, является ли boolFound истинным, вместо этого он будет искать столбцы, которые ** являются ** частью ColArray. – tigeravatar

+0

Извините, о моем отсутствии артикуляции и ясности. Я удалил свой макрос, а затем добавил его и внес изменения, на этот раз он работал так, как надеялся, где-то в моих попытках выяснить, как изменить код, я ввел ошибку. Спасибо за помощь. – xyz

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