Avatar billede Super Mester
31. august 2021 - 16:06 Der er 10 kommentarer og
2 løsninger

Automatisk gemme rækker i excel afhængig af celle værdi

Hvis jeg f.eks indtaster "Service" i B3, vil jeg gerne have at række 3 bliver gemt. Kan dette lade sig gøre uden at jeg selv skal "run" marcro og i så fald hvorledes vil koden se ud?

Jeg forestiller mig at hver gang jeg indtaster "Service" i en given række i kollonne B, så gemmes den række som jeg indtaster "Service" i  når jeg trykker enter. Er det muligt?
Avatar billede kim1a Ekspert
31. august 2021 - 20:53 #1
Mener du at række skjules?
VBA kan nemt skjule rækken ved en bestemt ordlyd som celleværdi, og kan selv initieres via f.eks. opdatering i arket.
Avatar billede Super Mester
31. august 2021 - 21:08 #2
Ja rækken skal skjules, hvis jeg i en given kolonne skriver et bestemt ord skal rækken hvor jeg indtaster ordet skjules. Jeg har googlet mig til en VBA kode der virker, men jeg skal selv starte macroen. Det vil jeg gerne om Macroen kunne gøre automatisk.
Avatar billede kim1a Ekspert
31. august 2021 - 21:19 #3
Oppe øverst i makrovinduet til det konkrete ark er der to drop downs. Vælg worksheet i de venstre og f.eks. selectionchange.

Dette beskriver det også godt:
https://docs.microsoft.com/da-dk/office/troubleshoot/excel/run-macro-cells-change
Avatar billede Super Mester
01. september 2021 - 08:35 #4
Det virker :-). Ved du også hvorledes jeg kan lave om således at jeg ikke gemmer rækker afhængig af værdien i A21? Altså istedet for taste ordet Service i Macroen, såeldes hver gang jeg indtaster Service bliver rækken gemt uden at reffere til en celle?

Value = Range("A21").Value Then Cells  - Kan jeg istedet for Range("A21") blot indskrive et ord? (Det er dog et mindre problem. Jeg kan leve med hvordan det fungere nu.
Avatar billede kim1a Ekspert
01. september 2021 - 09:44 #5
Jeg tror ikke helt jeg forstår, men hvis du lige nu har "service" til at stå i A21 og gerne vil have at den ikke henter værdien fra A21, men i stedet at det står i makroen, så er det nok bedst jeg ser hele din programmering så vi ikke dummer os.

Ud fra den ene linje du har givet nu virker det til at du kan blot skrive "Service" i stedet for hele Range("A21").Value (vigtigt du husker anførselstegn). Det kan dog være det laver fejl et sted.
Avatar billede Super Mester
01. september 2021 - 10:22 #6
Således! Præcist! Det virker som jeg håbede på. Cool! Jeg mener tak :-). Tak for hjælpen.
Avatar billede Super Mester
02. september 2021 - 16:41 #7
NB.
Vedr. Macroen for "hide rows" virker det fint, men...
Det hele virker men langsomt.   Jeg bruger nedenstående Macro og har tilføjet de 2 linier med Application.ScreenUpdating og det hjælper lidt, men stadig tager det 2 - 3 sekunder før jeg kan komme videre hver kan jeg laver noget/klikker i arket. Nogle gode ideer?

Hvis jeg nedsætter de 211 rækker går det naturligvis hurtigere, men jeg har 211 rækker hvor hver enkelt af rækkerne skal kunne gæmmes. 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

StartRow = 14

EndRow = 211

ColNum = 9

Application.ScreenUpdating = False

For i = StartRow To EndRow

If Cells(i, ColNum).Value = "N/A" Then

Cells(i, ColNum).EntireRow.Hidden = True

Else

Cells(i, ColNum).EntireRow.Hidden = False

End If

Next i

Application.ScreenUpdating = True

End Sub
Avatar billede kim1a Ekspert
02. september 2021 - 19:21 #8
Men er der en grund til at du løber dem igennem alle 211 hver gang? Skal den ikke blot kigge på den række du netop har rettet i?
Kopierer du dataen ind eller retter du enkeltvis?

Jeg er lidt i tvivl om hvad den betragter som activecell, men der må være en mulighed for at vurdere om ændring er indenfor din "tabel" og om cellen ligger i ColNum

Så noget med activecell.column = colnum eller noget i den stil som første check.
Avatar billede Super Mester
02. september 2021 - 19:43 #9
Ja, der er 211 rækker og nogle af dem skal sættes N/A og derefter gemmes. Ja, jeg sætter kun N/A i en celle/ Række ad gangen og kan jeg undgå at den ser alle rækkerne igennem hver gang vil det være super.
Avatar billede kim1a Ekspert
02. september 2021 - 20:58 #10
Måske noget i denne stil - du må selv lige tilrette med dine variable:

If ActiveCell.Column = 9 Then
    If ActiveCell.Row >= 11 And ActiveCell.Row <= 266 Then
        If ActiveCell.Value = "N/A" Then
            Rows(ActiveCell.Row).Hidden = True
        End If
    End If
End If
Avatar billede store-morten Ekspert
02. september 2021 - 22:42 #11
Prøv:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
   
    If Not Intersect(Target, Range("I14:I211")) Is Nothing Then
        If Target = "N/A" Then Target.EntireRow.Hidden = True
    End If
   
    Application.ScreenUpdating = True
End Sub
Avatar billede Super Mester
03. september 2021 - 08:06 #12
Mange tak for jeres input :-) Det er en stor hjælp!
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
Kurser inden for grundlæggende programmering

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