2017-01-23 187 views
1

我想隐藏Excel工作表中的多列。如何在Excel 2007中一次使用vba隐藏多列

ActiveSheet.Range:该作品采用精致漂亮。( “R10:CO10”)EntireColumn.Hidden =真

“R10” 是隐藏在第一和修复列。第二列和隐藏之间的所有列将根据日期值动态确定。

样品编码:

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天以上的所有列和我不能找到隐藏使用变量或具有多个列的任何提示列标识符或正如Scott指出,使用变量在运行时错误1004

+0

只是躲你去通过循环:'c.EntireColumn.Hidden = C <(d -7)'代替你的整个if语句。 –

+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