Макрос для отображения/скрытия рабочего листа на основе значения даты

У меня есть рабочая книга Excel, созданная исполняемым файлом с данными за дни месяца на отдельных листах. На «Листе 1» исполняемого файла также указаны дни месяца. Я хотел бы написать макрос, который будет отображать/скрывать рабочие листы на основе даты в «Листе 1».

Например, если в данных за январь отображаются дни 1, 2, 3, 4, 5, 11, 12, макрос должен отображать только соответствующие рабочие листы для Day1, Day2, Day3, Day4, Day5 и скрывать Day6 через Day10 и показать Day11 и Day12. Любые указатели приветствуются.

Спасибо.


person Lrn    schedule 21.07.2011    source источник
comment
Что у вас есть до сих пор? Хорошей отправной точкой для создания макроса является его запись и выполнение действий, которые вы хотите выполнить. Это даст много информации о функциях, которые вам нужно вызвать.   -  person Eddy    schedule 21.07.2011


Ответы (1)


public sub setSheetVisiblity()

  'Load the data from sheet 1 into a collection
  'I'm making the assumption that you just have days listed horizontally from 
  '1A to 1*

  Dim currentColumn as Integer
  Dim activeDayCollection as Collection

  currentColumn = 1
  Set activeDayCollection = new Collection

  While Cells(currentColumn, 1).Value <> ""

    activeDayCollection.add Cells(currentColumn, 1).Value 

    currentColumn = currentColumn + 1
  Wend

  'Make every sheet invisible/visible
  For each currentWorksheet as Worksheet in Worksheets

    If currentWorksheet.Name == "Day" + activeDayCollection.Item 1 Then
      currentWorksheet.Visible = true
      activeDayCollection.Remove 1
    Else
       currentWorksheet.Visible = false
    End If

  Next currentWorksheet
end sub

Код работает исходя из предположения, что дни на вашем первом листе расположены в порядке возрастания, листы называются Day###, где ### — номер дня, и вам, вероятно, придется добавить еще одну строку, чтобы вручную отобразить ваши первый лист. У меня нет с собой vba, поэтому в этом коде могут быть некоторые синтаксические ошибки, но он должен направить вас в правильном направлении.

person Chris Flynn    schedule 21.07.2011