2016-10-03 71 views
0

我正在使用这一位VBA代码来检测电子表格中的隐藏行。最重要的是,我希望它取消隐藏这些行,并用红色边框突出显示A列到W列之前隐藏行中的单元格。检测隐藏行的代码,取消隐藏并应用边界

Sub ShowRows() 
    Dim rng As Range 
    Dim r As Range 
    Dim sTemp As String 

    Set rng = Range("A1:A1000") 
    sTemp = "" 
    For Each r In rng.Rows 
     If r.EntireRow.Hidden Then 
      sTemp = sTemp & "Row " & Mid(r.Address, 4) & vbCrLf 
     End If 
    Next r 

    If sTemp > "" Then 
     sTemp = "The following rows are hidden:" & vbCrLf & _ 
      vbCrLf & sTemp 
      MsgBox sTemp 
    Else 
     MsgBox "There are no hidden rows." 
    End If 
End Sub 

编辑:对不起。我忘了提及该脚本的后面部分对所有行应用一些条件格式。无论这个脚本的这部分是在这之前还是之后出现,我认为这并不重要。但我不希望这取代其他格式,只需通过应用边框添加到其中。

+0

@scottcraner - 嘿! http://chat.stackoverflow.com/rooms/111528/vba-lounge – Jeeped

回答

0

像这样的事情?:

Sub ShowRows() 
    Dim rng As Range 
    Dim r As Range 
    Dim sTemp As String 

    Set rng = Range("A1:A1000") 
    sTemp = "" 
    For Each r In rng.Rows 
     If r.EntireRow.Hidden = True Then 
      sTemp = sTemp & "Row " & Mid(r.Address, 4) & vbCrLf 
      r.EntireRow.Hidden = false 
       With Range("A" & r.Row & ":W" & r.Row).Borders(xlEdgeLeft) 
        .Color = -16776961 
        .Weight = xlMedium 
       End With 

       With Range("A" & r.Row & ":W" & r.Row).Borders(xlEdgeTop) 
        .Color = -16776961 
        .Weight = xlMedium 
       End With 

       With Range("A" & r.Row & ":W" & r.Row).Borders(xlEdgeBottom) 
        .Color = -16776961 
        .Weight = xlMedium 
       End With 

       With Range("A" & r.Row & ":W" & r.Row).Borders(xlEdgeRight) 
        .Color = -16776961 
        .Weight = xlMedium 
       End With 
     End If 
    Next r 

    If sTemp <> "" Then 
     sTemp = "The following rows are hidden:" & vbCrLf & _ 
      vbCrLf & sTemp 
      MsgBox sTemp 
    Else 
     MsgBox "There are no hidden rows." 
    End If 
End Sub 
+0

这很好,但破坏了行已经有的格式。我已经改变了我的问题,以便将边框应用于行而不是填充颜色。 – Robby

+0

@Robby你走了! – Jeremy

+0

不错。还有一件事:我应该在我的评论中指定,但边框必须是红色的。我无法弄清楚如何指定边框颜色AND和重量。他们是否必须设置不同的陈述? – Robby

0

只需添加线取消隐藏和颜色排在你的行中循环

Sub ShowRows() 
    Dim rng As Range 
    Dim r As Range 
    Dim sTemp As String 
    Dim sTemp2 As String 

    Set rng = Range("A1:A1000") 
    sTemp = "" 
    For Each r In rng.Rows 
     If r.EntireRow.Hidden Then 
      sTemp = sTemp & "Row " & Mid(r.Address, 4) & vbCrLf 
      r.Hidden = False 
      sTemp2 = "A" & Mid(r.Address, 4) & ":H" & Mid(r.Address, 4) 
      Range(sTemp2).Borders.Color = vbRed 
     End If 
    Next r 

    If sTemp > "" Then 
     sTemp = "The following rows are hidden:" & vbCrLf & _ 
     vbCrLf & sTemp 
     MsgBox sTemp 
    Else 
     MsgBox "There are no hidden rows." 
    End If 
End Sub 
+0

此功能完美无缺,但破坏了该行已具有的格式。我已经改变了我的问题,以便将边框应用于行而不是填充颜色。 – Robby