2017-04-25 5 views
0

Ich versuche, etwas Einfaches zu tun und eine Zeile auszublenden, wenn alle Daten in dieser Zeile leer sind.Excel leere Zellen im Bereich ausblenden

Ich habe gesucht und kann es nicht funktionieren. Das habe ich bisher.

Sub UpdateFields_630() 
Application.ScreenUpdating = False 

Dim sht3 As Worksheet 
Set sht3 = ThisWorkbook.Worksheets("630 BOM") 

Dim LastRow As Long, LastCol As Long 
Dim rng As Range, c As Range 

On Error GoTo 0 

With sht3 
    Set rng = Cells 

    LastRow = rng.Find(What:="*", After:=rng.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row 

    LastCol = rng.Find(What:="*", After:=rng.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column 

    For Each c In Range(Cells(9, "E"), Cells(LastRow, LastCol)) 
    If c.Value = "" Then 
     c.EntireRow.Hidden = True 
    Else 
     c.EntireRow.Hidden = False 
    End If 
    Next 
End With 

sht3.Protect 

Set rng = Nothing 
Set sht3 = Nothing 
Application.ScreenUpdating = True 
End Sub 

Vor Sortieren

before

Nach Sortieren

after

Zeilen 13,14,19,20 und 38 werden aus irgendeinem Grund mit diesem Code versteckt und können nicht herausfinden warum.

Ich kann dies zur Arbeit, wenn ich basierend auf column "A" total = 0 verstecken, aber dann Zeilenzeilen 27 & 30 wird ausblenden. Ich habe versucht If c.Value = "x" Then c.EntireRow.Hidden = False und das schien nichts zu tun.

Danke für jede Hilfe.

+0

Statt zu überprüfen, ob der Zellenwert ist „“, prüfen Sie, ob die Länge des Zellwert ist 0. –

+0

@RichHolton Wie würde ich das tun? habe 'LEN' noch nicht in VBA verwendet. Thx –

Antwort

1

1- Du versteckst die Zeile, wenn jede seiner Zellen leer ist, nicht, wenn alle von ihnen leer sind

2- Sie sind nicht Ihre Bereiche qualifizieren, Ihre Klausel machen nutzlos .

Sie können Application.CountA verwenden, um zu überprüfen, ob alle Zellen eines Bereichs leer sind. Wenden Sie es in jeder Zeile an, um zu entscheiden, ob es ausgeblendet werden soll.

'    v   v (notice these dots) 
    For Each c In .Range("E9", .Cells(LastRow, LastCol)).Rows 
     c.EntireRow.Hidden = Application.CountA(c) = 0 
    Next 

EDIT

da die leeren Zellen haben die Formel, zählen CountA wont dann als leer. Aus diesem Grund diese statt:

For Each c In .Range("E9", .Cells(LastRow, LastCol)).Rows 
     c.EntireRow.Hidden = Application.CountIf(c, "") = c.Cells.Count 
    Next 
+0

ich bin immer noch sehr neu in VBA, immer noch lernen. Danke für die Eingabe. Ihr auf meine Schleife angewendeter Code tut nichts. Ich denke, dass ich etwas verpasse. –

+0

@MattTaylor Schritt durch es mit dem Debugger, überprüfen Calues ​​von 'lastRow' und' lastCol'. Beachte auch die Bereiche: 'Set rng = .Cells' (Punkt vor Cells, was' sht3.Cells' bedeutet). –

+0

@ASH ich habe es viele Male durchgemacht, bevor ich hier gepostet habe. Der Auswahlbereich von 'lastrow & lastcol' wählt den gesamten Bereich aus, den er haben soll. Es scheint nur das 'lastcol' für Daten zu überprüfen und alles andere zu verbergen. –

Verwandte Themen