Avatar billede janvogt Praktikant
03. oktober 2006 - 13:57 Der er 13 kommentarer og
1 løsning

VBA: Vis/skjul rækker

Jeg har behov for en kode, som skjuler rækker indenfor rækkerne 2:224, men kun hvis kolonne A - altså A2:A224 - er blank.

Hvis man kører makroen igen når der er skjule rækker i området, skal den vise alle rækker.

Håber opgaven er defineret godt nok.
Avatar billede kabbak Professor
03. oktober 2006 - 14:08 #1
Public Sub skjul()
    If Rows(2 & ":" & 224).EntireRow.Hidden Then
        Rows(2 & ":" & 224).EntireRow.Hidden = False
    Else
        If Len(Range("A2:A224").Text) = 0 Then
            Rows(2 & ":" & 224).EntireRow.Hidden = True
        End If
    End If
End Sub
Avatar billede janvogt Praktikant
03. oktober 2006 - 14:12 #2
Den skal kun tjekke på værdien i kolonne A.
Hvis f.eks. celle B4 er udfyldt skal række 4 alligevel skjules, hvis A4 er blank.
Avatar billede janvogt Praktikant
03. oktober 2006 - 14:14 #3
Det er hver enkelt række i området 2:224, som skal tjekkes.
Avatar billede kabbak Professor
03. oktober 2006 - 14:35 #4
Public Sub skjul()
    Dim SK As Boolean, I As Integer
    SK = True
    Application.ScreenUpdating = False
    For I = 2 To 224
        If Rows(I).EntireRow.Hidden Then
            Rows(I).EntireRow.Hidden = False
            SK = False
        End If
    Next
    If SK Then
        For I = 2 To 224
            If Cells(I, 1) = "" Then
                Rows(I).EntireRow.Hidden = True
            End If
        Next
    End If
    Application.ScreenUpdating = True
End Sub
Avatar billede janvogt Praktikant
03. oktober 2006 - 14:43 #5
Tak, det ser ud til at virke, men den kører i hele 20 sekunder.
Kan det virkelig passe?
Avatar billede kabbak Professor
03. oktober 2006 - 14:48 #6
det er ikke hurtigt at skjule rækker, her er måske en forbedring

Public Sub skjul()
    Dim SK As Boolean, I As Integer, Data As Variant
    SK = True
    Data = Range("A1:A224")
    Application.ScreenUpdating = False
    For I = 2 To 224
        If Rows(I).EntireRow.Hidden Then
            Rows(I).EntireRow.Hidden = False
            SK = False
        End If
    Next
    If SK Then
        For I = 2 To 224
            If Data(I, 1) = Empty Then
                Rows(I).EntireRow.Hidden = True
            End If
        Next
    End If
    Application.ScreenUpdating = True
End Sub
Avatar billede kabbak Professor
03. oktober 2006 - 14:50 #7
det tager ca 1 sek. her

har du formler på arket, så slår vi lige beregninger fra

Public Sub skjul()
    Dim SK As Boolean, I As Integer, Data As Variant
    SK = True
    Data = Range("A1:A224")
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    For I = 2 To 224
        If Rows(I).EntireRow.Hidden Then
            Rows(I).EntireRow.Hidden = False
            SK = False
        End If
    Next
    If SK Then
        For I = 2 To 224
            If Data(I, 1) = Empty Then
                Rows(I).EntireRow.Hidden = True
            End If
        Next
    End If
   
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Avatar billede excelent Ekspert
03. oktober 2006 - 15:29 #8
prøv:

Sub Skjul()
Range("a2:a224").SpecialCells(xlCellTypeBlanks).Cells.Select
If Selection.EntireRow.Hidden = True Then Selection.EntireRow.Hidden = False Else Selection.EntireRow.Hidden = True
Cells(1, 1).Select
End Sub
Avatar billede janvogt Praktikant
03. oktober 2006 - 16:02 #9
Ja, der er nogle tunge formler imellem.
Men den sidste var god - ca. 3 sek.

Smid et svar og tak for hjælpen.

Hvis koden nu skal køre på ark2 til ark10, hvordan vil koden så se ud?
Avatar billede janvogt Praktikant
03. oktober 2006 - 16:03 #10
Ups, det var jo exelent. Smid også du et svar, så kan I dele.
Avatar billede excelent Ekspert
03. oktober 2006 - 16:06 #11
samme kode blot skal den ind i ThisWorkbook
Avatar billede excelent Ekspert
03. oktober 2006 - 16:08 #12
og dog lad os lige tænke :-)
Avatar billede excelent Ekspert
03. oktober 2006 - 16:39 #13
alm. modul

Sub xskjul()
Dim t
Application.ScreenUpdating = False
For t = 2 To 10
Sheets(t).Select
Range("a2:a224").SpecialCells(xlCellTypeBlanks).Cells.Select
If Selection.EntireRow.Hidden = True Then Selection.EntireRow.Hidden = False Else Selection.EntireRow.Hidden = True
Cells(1, 1).Select
Next
Cells(1, 1).Select
Sheets(1).Select
Application.ScreenUpdating = True
End Sub
Avatar billede excelent Ekspert
03. oktober 2006 - 17:16 #14
af en eller anden grund har SpecialCells(xlCellTypeBlanks)
problemer med helt nye ark.
kan løses med at indtaste et fx. x i en celle og så slette det igen
et sted neden for 'hide området'
ikke sikkert det har betydning i dit eks.
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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