Avatar billede boro23 Forsker
30. maj 2013 - 13:32 Der er 9 kommentarer og
1 løsning

Skjule rækker VBA

Hej igen Eksperter
Har igen brug for Jeres hjælp.
Mangler en VBA kode der skjuler alle rækker fra række 238 og op efter, indtil der kommer en celle i kolonne B der er >2
Avatar billede boro23 Forsker
30. maj 2013 - 13:58 #1
Ups. Fjern ark beskyttelse før koden og beskyt ark og gem efter koden.
Avatar billede Mads Larsen Nybegynder
30. maj 2013 - 15:37 #2
Det her vil skjule fra række 238 og frem indtil der kommer en celle i kolonne B med en værdi højere end 2.

Hvis der ikke findes nogen værdier i kolonne B, så tager det noget tid før den bliver færdig ;) Så hvis det er flere hundred tusind linier du skal have skjult er det måske ikke den mest optimale løsning :)


Sub Test()
  Application.ScreenUpdating = False
       
    If ActiveSheet.ProtectContents = True Then
        SheetProtected = True
        ActiveSheet.Unprotect
    Else
        SheetProtected = False
    End If
   
    Range("B238").Select
    Do Until ActiveCell.Value > 2
        ActiveCell.EntireRow.Hidden = True
        ActiveCell.Offset(1, 0).Select
    Loop
   
    Application.ScreenUpdating = True
   
    If SheetProtected = True Then
        ActiveSheet.Protect
    End If
End Sub
Avatar billede kim1a Ekspert
30. maj 2013 - 15:39 #3
Må jeg foreslå dig at gå på udkig i http://www.kronsell.net/

Her ligger en række småmakroer som er tæt på det du leder efter. Jkrons mener jeg også selv deltager på disse sider indimellem.
Avatar billede Mads Larsen Nybegynder
30. maj 2013 - 15:40 #4
Der kommer lige en optimering..

Sub Test()
  Application.ScreenUpdating = False
       
    If ActiveSheet.ProtectContents = True Then
        SheetProtected = True
        ActiveSheet.Unprotect
    Else
        SheetProtected = False
    End If
   
    Range("B238").Select
    Do Until ActiveCell.Value > 2
        ActiveCell.Offset(1, 0).Select
    Loop
    Range("B238:B" & ActiveCell.Row).EntireRow.Hidden = True
   
    Application.ScreenUpdating = True
   
    If SheetProtected = True Then
        ActiveSheet.Protect
    End If
End Sub
Avatar billede boro23 Forsker
30. maj 2013 - 16:55 #5
Hej IT-GuFFe, koden virker ikke, der kommer en box op med teksten fejl 400 og curseren stopper i B1048576.


Hej kim1a, tak for tippet
Avatar billede store-morten Ekspert
30. maj 2013 - 20:07 #6
Prøv denne på en kopi:
Sub Test_2()
    Dim iRow As Long 'Rækken der arbejdes med
    Dim sColum As String 'Kolonnen der arbejdes med
    iRow = 238 'Sæt hvilken række der startes fra
    sColum = "B" 'Sæt hvilken kolonne der skal læses fra
   
    ActiveSheet.Unprotect
   
    Do Until Range(sColum & iRow).Value > 2
        iRow = iRow + 1
        If iRow = 1048576 Then GoTo Enden
    Loop
        SidsteRække = iRow - 1
        Range("B238:B" & SidsteRække).EntireRow.Hidden = True
        GoTo Afslut
Enden:
    MsgBox "Der er ikke flere rækker i regnearket"
Afslut:
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        ActiveWorkbook.Save
End Sub
Avatar billede jens48 Ekspert
30. maj 2013 - 21:12 #7
Hej Boro23,
Når du skriver fra række 238 og op efter så forstår jeg at du vil skjule række 1 til 238. Derfor foreslår jeg følgende:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
ActiveSheet.Unprotect
If Application.WorksheetFunction.Max(Range("B:B")) <= 2 Then
Range("B1:B238").EntireRow.Hidden = True
Else
Range("B1:B238").EntireRow.Hidden = False
End If
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
End Sub

Makroen aktiveres automatisk, hvis der skrives noget i kolonne B, som jeg antager ikke er låst.
Avatar billede store-morten Ekspert
30. maj 2013 - 21:34 #8
Hvis jens48 har ret, har jeg denne rettelse:
Sub Test_3()
    Dim iRow As Long 'Rækken der arbejdes med
    Dim sColum As String 'Kolonnen der arbejdes med
    iRow = 238 'Sæt hvilken række der startes fra
    sColum = "B" 'Sæt hvilken kolonne der skal læses fra
   
    ActiveSheet.Unprotect
   
    Do Until Range(sColum & iRow).Value > 2
        iRow = iRow - 1
        If iRow = 1 Then GoTo Enden
    Loop
        ØversteRække = iRow + 1
        Range("B238:B" & ØversteRække).EntireRow.Hidden = True
        GoTo Afslut
Enden:
    MsgBox "Der er ikke flere rækker i regnearket"
Afslut:
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        ActiveWorkbook.Save
End Sub
Avatar billede boro23 Forsker
31. maj 2013 - 06:51 #9
Hej store-morten
jens48 har ret, din kode virker præsis som den skal. Igen 1000 tak, smider du et svar. Go' weekend


Hej jens48
Tak for dit indlæg, uden den var resultatet nok ikke blevet som det blev. Jeg har oprettet en tråd "point til jens48", vi du smide et svar der. Go' weekend
Avatar billede store-morten Ekspert
31. maj 2013 - 16:07 #10
Velbekomme.
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