Avatar billede pletz Nybegynder
23. marts 2011 - 08:21 Der er 6 kommentarer

skjule tomme rækker automatisk

Jeg har et hovedark hvorfra jeg kæder data til en række underark. Underarkene har alle de samme rækker som hovedarket, men i hvert ark vil der kun blive kædet data i en del af rækkerne. For overskuelighedens skyld vil jeg kun se de rækker der er kædet data til. Jeg gør det pt ved ved brug af autofilter (ikke tomme), med det betyder jo at jeg skal opdatere (alle -> ikke tomme), hver gang jeg har skrevet i hovedarket.

Er der en måde hvorpå man automatisk kan skjule rækker som ikke indeholder data?

mange hilsner
pletz
Avatar billede perhol Seniormester
23. marts 2011 - 10:14 #1
Denne kode tester på række 4 til 20, kolonnerne B til G
Hvis du har brug for at teste på andre rækker/kolonner sættes det i linjerne mellem stjernerne.

Koden indsættes i arkets modul


Option Explicit

Sub Worksheet_Activate()
   
    Dim HideRow&, RowRange As Range, RowRangeValue&
   
    '*****************************
    'Bestemmer første og sidste række der skal testes på
    Const FirstRow As Long = 4
    Const LastRow As Long = 20
   
    'Bestemmer hvilke kolonner der skal testes på
    Const FirstCol As String = "B"
    Const LastCol As String = "G"
    '*****************************
   
    ActiveWindow.DisplayZeros = False
    Application.ScreenUpdating = False
   
    For HideRow = FirstRow To LastRow
       
        Set RowRange = Range(FirstCol & HideRow & _
        ":" & LastCol & HideRow)
       
        RowRangeValue = Application.Sum(RowRange.Value)
       
        If RowRangeValue <> 0 Then
            'Der er noget i denne række - Skjul den ikke
            Rows(HideRow).EntireRow.Hidden = False
        Else
            'Der er ikke noget i denne række endnu - Skjul den
            Rows(HideRow).EntireRow.Hidden = True
        End If
       
    Next HideRow
   
    Application.ScreenUpdating = True
Avatar billede pletz Nybegynder
23. marts 2011 - 15:19 #2
Jeg kan desværre ikke få det til at virke.

Jeg har stillet makro-sikkerheden til "mellem" som Excel-hjælpen foreslår. Når jeg forsøger at afspille makroen får jeg meddelelsen "Compile error: Expected End Sub". Når jeg klikker "Hjælp" får jeg denne meddelelse:

*******
Expected End Sub
 
An End procedure statement must match the procedure in which it occurs. This error has the following cause and solution:

You used End Function or End Property to end a Sub procedure.
Use End Sub for this type of procedure.
*******
Jeg skal sige at jeg er absolut nybegynder i Visual Basic ;-)

mvh
pletz
Avatar billede pletz Nybegynder
23. marts 2011 - 16:03 #3
Jeg fik lige den ide at skrive End Sub til sidst i koden.
Så forsvandt ALLE de pågældende rækker, også dem der havde data!
Avatar billede perhol Seniormester
23. marts 2011 - 22:34 #4
hvilket område af rækker og kolonner kan du få data i?
Du kunne evt. vise nogen eksempeldata her eller sende mig en eksempel-fil.
Mailadresse i min profil.
Avatar billede perhol Seniormester
24. marts 2011 - 01:37 #5
Problemet med min første kode var, foruden den manglende End Sub, at den testede på numeriske værdier, og de værdier der er i arkene er X'er.

Jeg fandt en kode her:

http://www.mrexcel.com/archive/VBA/8771.html

og tilpassede den lidt.

Koden sættes ind i arkmodulet på de ark hvor man vil skjule rækker.

Her er koden:

Option Explicit
Private Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    Dim i      As Integer
    Dim RStart As Range
    Dim REnd  As Range
    Set RStart = Range("B6")
    Set REnd = Sheets("uge13").Range("B65536").End(xlUp).Offset(0, 31)
    Range(RStart, REnd).Select
    On Error Resume Next
    With Selection
        .EntireRow.Hidden = False
        For i = 1 To .Rows.Count
            If WorksheetFunction.CountBlank(.Rows(i)) = 32 Then
                .Rows(i).EntireRow.Hidden = True
            End If
        Next i
    End With
    Set RStart = Nothing
    Set REnd = Nothing
    Range("A1").Select
    Application.ScreenUpdating = True
End Sub

Det virker ikke fuldstændig efter hensigten.
Det er ikke alle tomme rækker der bliver skjult, men næsten.

Jeg ved ikke hvorfor det virker sådan, men det har noget at gøre med denne linje:

            If WorksheetFunction.CountBlank(.Rows(i)) = 32 Then

Hvis man ændrer tallet 32 til andre værier får man en anden virkning, men ikke en bedre.

Altså - ikke helt løst, men i hvert fald nogle mere overskuelige ark.
Avatar billede pletz Nybegynder
24. marts 2011 - 09:03 #6
Tak for indsatsen!

Jeg prøvede med den første kode igen, efter at have ændret x'erne til 1-taller, og så virker det 100%! Jeg kan fint leve med denne løsning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester