2016-10-03 26 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