2016-02-17 4 views
0

У меня проблема с концепцией кода.Проверьте, существует ли значение из листа имен в ячейке vba

Я просто закодировал что-то, что заглядывает в столбец (с 500 + ячейками) , и если значение ячейки не существует в виде имени листа (в том же wb), то создайте рабочий лист с именем значение в этой ячейке.

Вот мой код:

' Si le ticker existe mais pas l'onglet,créé l'onglet 
LastRowData = Data.Cells(Data.Rows.Count, "A").End(xlUp).Row 'trouve la dernière ligne de Data 
LastColumnData = Data.Cells(1, Data.Columns.Count).End(xlToLeft).Column 'trouve la dernière colonne de Data 

For i = 2 To LastRowData 
    For Each sht In Perftitres.Worksheets 
     If Not SheetExists(Data.Cells(i, 9), Perftitres) Then 
     Worksheets.Add.Name = Data.Cells(i, 9) 
     ActiveSheet.Move After:=Worksheets(2) 
     End If 
    Next sht 
Next i 

Этот код работы. SheetExist - это функция, которая говорит true, если лист существует и false, если нет.

Тем не менее, я хочу сделать обратное сейчас:

Если рабочий лист в качестве имени, которое не в колонке, то скрыть этот лист. Я не могу понять это ... Я хочу посмотреть в каждом листе, кроме первого (это данные). Если имя отображается в столбце, ничего не делайте. Если это не скроет лист.

спасибо.

+0

Хм, скрыть каждый лист ожидать, а затем UNHIDE те, в вашем списке? Или перебирайте все листы, если это имя в списке, показать, иначе скрыть. – vacip

+0

Проблема в том, что список не исправлен. Мне нужен двойной цикл? – Florian

+0

Нет, зачем вам? На самом деле, я не вижу, как ваш второй цикл делает что-то хорошее в вашем исходном коде. – vacip

ответ

1

непроверенная, но что-то вроде этого:

Dim sName As String, m, sht As Worksheet 

LastRowData = Data.Cells(Data.Rows.Count, "A").End(xlUp).Row 
LastColumnData = Data.Cells(1, Data.Columns.Count).End(xlToLeft).Column 

'Hide any unmatched sheets (and unhide any matched ones) 
For Each sht In Perftitres.Worksheets 
    m = Application.Match(sht.Name, Data.Cells(2, 9).Resize(LastRowData, 1), 0) 
    sht.Visible = IIf(IsError(m), xlSheetHidden, xlSheetVisible) 
Next sht 

'add any missing sheets 
For i = 2 To LastRowData 
    sName = Data.Cells(i, 9).Value 
    If Not SheetExists(sName, Perftitres) Then 
     With Perftitres.Worksheets.Add(After:=Perftitres.Worksheets(2)) 
      .Name = sName 
     End With 
    End If 
Next i 
+0

Это работает, но я не хочу скрывать данные листа. Что такое IIF? – Florian

+0

Если вы не хотите скрывать лист «Данные», вы можете проверить имя листа перед выполнением поиска соответствия. 'IIf()' является функцией - вы можете просмотреть его, но он работает аналогично листу 'IF()' –

+0

Я добавил: Data.Visible = True Спасибо. – Florian

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