2013-08-07 1 views
0

Мне нужно скрыть диапазон ячеек с использованием макроса в excel. C11 содержит индекс столбца, откуда мне нужно начинать скрывать столбцы.Скрытие диапазона столбцов в Excel с использованием VBA на основе значений ячейки

Sub test() 

Dim i As Integer 
Dim j As Integer 


Dim rocket As Range 


i = Range("c11").Value 
j = 12 

rocket = Range(Cells(5, i), Cells(5, j)) 

Range("Rocket").Select 

Selection.EntireColumn.Hidden = True 


End Sub 

Код дает неожиданную ошибку и как я новичок, так что понятия не имеет, что должно быть сделано ..

ответ

1

шагов дерева, чтобы сделать код работу:

1-й. Добавить Set ключевое слово в соответствующей строке, которое необходимо:

Set rocket = Range(Cells(5, i), Cells(5, j)) 

2. Rocket variable представляет собой диапазон, Вам не нужно будет называть его таким образом:

Range("Rocket").... 

но

rocket.... 

3rd. Избегайте Select method и Selection object всегда, когда это возможно. Поэтому последние две линии заменяются на эту единицу (которая также реализует 2-й шаг):

rocket.EntireColumn.Hidden = true 
0

Этот последний ответ был потрясающим! Просто для чужой FYI, вот что работало в Excel 2007. Первая строка всегда 3, но конечная строка должна быть переменной. Вот где я столкнулся с проблемой. ЭТО ФИКСИРОВАННОЕ ЭТО! Последние 4 строки перед «Конец If» выполняют работу. Надеюсь это поможет!

Dim RowsToHide As Range 
Dim RowHideNum As Integer 

' Set Correct Start Dates for Billing in New File 
Workbooks("----- Combined_New_Students_Updated.xlsx").Activate 
Sheets("2015").Activate 
StartDateLine1 = Format(START_DATE_1, "ww") - 1 ' Convert Start Date to Week Number 
StartDateLine1 = (StartDateLine1 * 6) - 2 ' Convert Start Date to Line Number 
If StartDateLine1 >= "10" Then 
Cells(4, "q").Value = "" 
Cells(StartDateLine1, "q").Value = STATUS_1 
Cells(StartDateLine1, "z").Value = "START DATE " + START_DATE_1 
RowHideNum = StartDateLine1 - 2 
Set RowsToHide = Range(Cells(3, "a"), Cells(RowHideNum, "ab")) 
RowsToHide.Select 
RowsToHide.EntireRow.Hidden = True 
End If