2017-01-23 2 views
1

엑셀 워크 시트에 여러 열을 숨기고 싶습니다.Excel 2007에서 vba를 사용하여 여러 열을 한 번에 숨기는 방법

ActiveSheet.Range :이 사용 꽤 잘 작동합니다. ("R10 : CO10")를 EntireColumn.Hidden이

"R10은"숨길 제 고정 칼럼 True입니다 =. 두 번째 열과 숨길 열 사이의 모든 열은 날짜 값에 따라 동적으로 결정됩니다.

샘플 코딩 :

Private Sub Worksheet_Activate() 
    Dim c As Range 
    Dim start As String 
    Dim ende As String 
    start = "R10" 
    ende = "CO10" 
    Dim d As Date 
    d = Date 
    For Each c In Range("R10:HU10") 
     If c = (d - 8) Then 
      ende = **how to assign???** 
     End If 
     If c = (d - 7) Then 
      Application.Goto c, True 
     End If 
    Next c 
    'ActiveSheet.Range(**"start:ende"**).EntireColumn.Hidden = True 
End Sub 

행 (10)는 날짜 값을 보유하고 나는 날짜 나이가 7 일 모든 열을 숨기 싶습니다 내가 변수 나과를 사용하여 여러 열을 숨기기에 대한 힌트를 발견 할수 없어 열 식별자 또는 스콧이 지적했듯이 변수의 사용은 런타임 오류 1004

+0

그냥 숨기기 :'c.EntireColumn.Hidden의 = C를 <(D ​​다른 사람들이 같은 문제로 어려움을 겪고 작업 솔루션을 얻는 것이 경우, 여기 내 솔루션입니다 -7)'을 사용합니다. –

+0

구현하기 쉽고 잘 작동하지만 각 열을 순차적으로 숨기면서 화면이 깜박입니다. 그 이유로 한 번에 열의 범위를 숨기려고합니다. –

+0

그런 다음 화면 업데이트를 해제하십시오. Application.ScreenUpdating = False'와 서브의 시작 부분에'Application.ScreenUpdating = True'가 있습니다. –

답변

0

에서 끝나는 열 등

의 수는, 내 첫 번째 대답이 완료되지 않았습니다.

Function GetColChars(col As Integer) As String 

    Dim coldown As Integer 'Column Countdown 
    Dim colrem As Integer 'Coumn Value Remaining 
    Dim colname As String 'Temporary String value for column name 

    Const alphanums = 26 
    Const aposition = 64 
    coldown = col 
    colname = "" 

    While coldown > 0 

     colrem = coldown Mod alphanums 
     If colrem = 0 Then colrem = 26 
     newchar = Chr(64 + colrem) 
     colname = newchar & colname 
     coldown = Int((coldown - 1)/alphanums) 

    Wend 

    GetColChars = colname 

End Function 

가 그 다음 열 문자를 얻을 수있는 함수를 호출 : 다음과 같은 기능을 사용할 수 있습니다 내가 스콧 솔루션 접근 방식 테스트 한

ende = GetColChars(c.column) 
+0

안녕하세요, 귀하의 솔루션을 내일 사용해 보겠습니다. 고맙습니다. –

0

을 마지막으로 작업을 얻었다. 당신은 루프를 통해 이동으로

Private Sub Worksheet_Activate() 

Dim lastDateRangeColumn As Range 
Dim givenDateRange As Range 
Set givenDateRange = ActiveSheet.Range("R10:HU10") 
Dim firstDateRangeColumn As Range 
Set firstDateRangeColumn = ActiveSheet.Range("R10") 

Dim todaysDate As Date: todaysDate = Date 

For Each tempDateRangeColumn In givenDateRange 
    If tempDateRangeColumn < (todaysDate - 7) Then 
     Set lastDateRangeColumn = ActiveSheet.Range(tempDateRangeColumn.Address) 
    End If 
    If tempDateRangeColumn = (todaysDate - 7) Then 
     Application.Goto tempDateRangeColumn, True 
    End If 
Next tempDateRangeColumn 

Dim firstColumnNumber As Long 
Dim lastColumnNumber As Long 
firstColumnNumber = Range(firstDateRangeColumn.Address).Column 
lastColumnNumber = Range(lastDateRangeColumn.Address).Column 

Dim rangeToBeHidden As Range 
Set rangeToBeHidden = Range(Cells(1, firstColumnNumber), Cells(1, lastColumnNumber)) 

rangeToBeHidden.EntireColumn.Hidden = True 

End Sub 
관련 문제