2017-01-09 7 views
0

Я до сих пор довольно новичок в VBA, но после небольшого исследования я столкнулся с созданием нижеприведенного варианта.Упорядочить случай выбора

Я хотел бы скрыть/показать количество строк, указанных в ячейке. Я в настоящее время есть выбор случай, который работает, но очень долго наматывается и ограничивается только 30.

Sub Toggle_Rows() 
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets("Calendar") 
Change Sheet1 to the name of your sheet 

Select Case CStr(Sheet.Range("NoEmployees").Value2) 

Case "1" 
    Sheet.Rows("8:36").Hidden = True 
    Sheet.Rows("7:7").Hidden = False 
Case "2" 
    Sheet.Rows("9:36").Hidden = True 
    Sheet.Rows("7:8").Hidden = False 
Case "3" 
    Sheet.Rows("10:36").Hidden = True 
    Sheet.Rows("7:9").Hidden = False 
Case "4" 
    Sheet.Rows("11:36").Hidden = True 
    Sheet.Rows("7:10").Hidden = False 
Case "5" 
    Sheet.Rows("12:36").Hidden = True 
    Sheet.Rows("7:11").Hidden = False 
Case "6" 
    Sheet.Rows("13:36").Hidden = True 
    Sheet.Rows("7:12").Hidden = False 
Case "7" 
    Sheet.Rows("14:36").Hidden = True 
    Sheet.Rows("7:13").Hidden = False 
Case "8" 
    Sheet.Rows("15:36").Hidden = True 
    Sheet.Rows("7:14").Hidden = False 
Case "9" 
    Sheet.Rows("16:36").Hidden = True 
    Sheet.Rows("7:15").Hidden = False 
Case "10" 
    Sheet.Rows("17:36").Hidden = True 
    Sheet.Rows("7:16").Hidden = False 

ETC... 

Case Else 

End Select 

End Sub 

Если кто-то может объяснить, каким образом я мог бы сократить это вниз, а также расширить количество строк будет скрывать/unhide, то было бы весьма полезно.

ответ

5

Я хотел бы предложить вам только действительно нужно что-то вроде этого

Select case CLng(Sheet.Range("NoEmployees").Value2) 

Case 1 to 30 
    Sheet.Rows("7:36").Hidden = True 
    Sheet.Rows(7).resize(CLng(Sheet.Range("NoEmployees").Value2)).Hidden = False 
End Select 

Я оставил Select Case там, как я предполагал, что вы хотели, чтобы ограничить те строки, которые могут быть затронуты.

+0

избили меня, слишком медленно на Kboard :) –

4

В вашем случае ваша переменная и диапазоны, которые вы хотите скрыть/отобразить, коррелируют линейно. Поэтому вам не нужен отдельный случай, но он может просто использовать следующее:

val = your value 
Sheet.Rows(7+val & ":36").Hidden = True 
Sheet.Rows("7:" & 6+val).Hidden = False 

для покрытия всех случаев.

0

Используйте таблицу, чтобы вы просто искали свое значение CASE, и там вы найдете 2 номера, которые вам нужны. Если ваши значения CASE (или могут быть превращены) в последовательные целые числа, вы можете использовать массив; иначе мог бы быть какой-то словарь.