Avatar billede LS-Falster Juniormester
25. oktober 2011 - 13:41 Der er 10 kommentarer og
1 løsning

Skjule ovenstående linje ved specifik værdi i celleområde

Hej

Jeg har brug for en VBA-kode som kan skjule en ovenstående linje ved en bestemt celleværdi.

Eksempel:
Hvis der i celle B1, C1 og D1 står "<lag ikke berørt>", skal række A skjules, dvs, men altså kun når alle 3 celler indeholder teksten "<lag ikke berørt>".
Avatar billede Ialocin Novice
26. oktober 2011 - 11:39 #1
Hej LS-Falster

Kan du bruge følgende VBA kode, som skal ligge under det aktuelle sheets Change hændelse ?


Private Sub Worksheet_Change(ByVal Target As Range)
Dim b As String
Dim c As String
Dim d As String
Dim v As Boolean

    'sæt b, c og d = værdien af cellerne B1, C1 og D1
    b = Range("B1").Value
    c = Range("C1").Value
    d = Range("D1").Value
   

    'tjek værdierne ... Hvis de alle er = "<lag ikke berørt>" ?, så sæt v = true
    If b = "<lag ikke berørt>" And c = "<lag ikke berørt>" And d = "<lag ikke berørt>" Then v = True
   
       
   
    'hvis v er ture
    If v = True Then
       
        'vælg kolonne A
        Columns(1).Select
       
        'skjul den valgte kolonne
        Selection.EntireColumn.Hidden = True
       
        'vælg celle B1
        Range("B1").Select
   
    Else

        'vælg kolonne A
        Columns(1).Select
       
        'skjul den valgte kolonne
        Selection.EntireColumn.Hidden = False
       
        'vælg celle B1
        Range("B1").Select

    End If

End Sub


Med venlig hilsen, Nicolai
Avatar billede LS-Falster Juniormester
26. oktober 2011 - 14:15 #2
Hej Nicolai

Jeg kan desværre se, at jeg har forklaret mig forkert og byttet om på kolonner og rækker. Så nu har jeg prøvet at omskrive det til det konkrete regneark.

Private Sub skjul_overskriften(ByVal Target As Range)
Dim b As String
Dim c As String
Dim d As String
Dim e As String
Dim f As String
Dim g As String
Dim h As String
Dim i As String

Dim v As Boolean

    'sæt b - i = værdien af cellerne c11- c18
    b = Range("c11").Value
    c = Range("C12").Value
    d = Range("c13").Value
    e = Range("c14").Value
    f = Range("c15").Value
    g = Range("c16").Value
    h = Range("c17").Value
    i = Range("c18").Value


    'tjek værdierne ... Hvis de alle er = "<lag ikke berørt>" ?, så sæt v = true
    If b = "<lag ikke berørt>" And c = "<lag ikke berørt>" And d = "<lag ikke berørt>" And e = "<lag ikke berørt>" And f = "<lag ikke berørt>" And g = "<lag ikke berørt>" And h = "<lag ikke berørt>" And i = "<lag ikke berørt>" Then v = True
 
     
 
    'hvis v er true
    If v = True Then
     
        'vælg række 10
        Rows("10").Select
     
        'skjul den valgte række
        Selection.EntireRow.Hidden = True
     
        'vælg celle B1
        Range("c11").Select
 
    Else

        'vælg række 10
        Rows("10").Select
     
        'skjul den valgte række
        Selection.EntireRow.Hidden = False
     
        'vælg celle B1
        Range("c11").Select

    End If

End Sub

----------------------------------------------
Der er et eller andet, som jeg gør forkert. Hvis C11 til C18 indeholder <lag ikke berørt>, skal række 10 skjules, men det sker ikke.
Jeg ved ikke, hvor jeg skal placere koden (under et nyt Module, under det konkrete regneark eller ThisWorkbook???). Desuden er de andre Public subs - har det en betydning?

Du skal nok få dine point fordi jeg har forklaret mig forkert, men jeg håber, at du kan hjælpe mig videre inden da.
Avatar billede store-morten Ekspert
26. oktober 2011 - 19:01 #3
Prøv:
Sub skjul_overskriften()

If Range("c11").Value = "<lag ikke berørt>" And _
Range("c12").Value = "<lag ikke berørt>" And _
Range("c13").Value = "<lag ikke berørt>" And _
Range("c14").Value = "<lag ikke berørt>" And _
Range("c15").Value = "<lag ikke berørt>" And _
Range("c16").Value = "<lag ikke berørt>" And _
Range("c17").Value = "<lag ikke berørt>" And _
Range("c18").Value = "<lag ikke berørt>" Then

Rows("10").EntireRow.Hidden = True
Else
Rows("10").EntireRow.Hidden = False
End If

End Sub


Kopier koden -->
Højreklik på aktuelle Ark --> vælg 'Vis programkode'
Hold ctrl nede --> tryk tasten V
Luk på det røde kryds.

Vælg Menuen "Makroer" og dobbelt klik på 'Ark1.skjul_overskriften'

Hvis du bytter første linie ud med:
Private Sub Worksheet_Change(ByVal Target As Range)
Køres makroen når der ændres i arket.
Avatar billede Ialocin Novice
26. oktober 2011 - 21:31 #4
Hej LS-Falsetr

Din omskrevne kode fungere perfekt her hos mig :o)

Du skal kopiere koden ind i det aktuelle ark Change hændelse ... hændelse aktiveres, hver gang der ændres i en celle på det pågældende ark.

Jeg vil gerne poste min eksempel fil til dig, hvis det kan hjælpe ??

Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
26. oktober 2011 - 22:02 #5
Hej LS-Falster

Her er en lidt enklere kode, som gør det samme + hændelsen/koden aktiveres kun, hvis der ændres i cellerne fra og med C11 til og med C18.

Kopier koden ind i arket Change hændelse ...


Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Integer
Dim b As Integer

'koden skal kun afvikles, hvis der ændres i cellerne C11 til C18
If Target.Address >= "$C$11" And Target.Address <= "$C$18" Then

        'nulstil tællevariabel
        b = 0
       
        'tjek cellerne fra C11 til C18
        For a = 11 To 18
         
            If Range("C" & a).Value = "<lag ikke berørt>" Then
             
                b = b + 1
         
            End If
           
        Next
           
           
           
            'hvis b er 8 ... indeholder cellerne C11-C18 værdien: "<lag ikke berørt>"
            If b = 8 Then
             
                'vælg række 10
                Rows("10").Select
             
                'skjul den valgte række
                Selection.EntireRow.Hidden = True
             
                'vælg celle B1
                Range("c11").Select
         
            Else
       
                'vælg række 10
                Rows("10").Select
             
                'skjul den valgte række
                Selection.EntireRow.Hidden = False
             
                'vælg celle B1
                Range("c11").Select
       
            End If


End If

End Sub


Med venlig hilsen, Nicolai
Avatar billede LS-Falster Juniormester
14. november 2011 - 15:07 #6
Hej Nicolai

Jeg har prøvet din løsning, men har opdaget, at cellevædierne som skulle indeholde "<lag ikke berørt>" henter deres resultat fra et andet ark. Det kan jeg ikke overskue.

Dit eksempel fungerer sikkert fint, så hvis du smider et svar, får du dine point. Jeg vil nok arbejde videre med den anden løsning fra Store-Morten, som jeg bedre kan overskue. Men tak for hjælpen under alle omstændigheder. Jeg lærer lidt hver gang.

Mvh Lars
Avatar billede LS-Falster Juniormester
14. november 2011 - 15:14 #7
Hej Store-Morten

Jeg har testet dit forslag, men jeg har opdaget, at de data som står i cellerne C11 til C18 bliver hentet fra et andet ark. Hvordan laver jeg linket fra mit andet regneark - "Ark2" i nedenstående kode?

Sub skjul_overskriften()

If Range("c11").Value = "<lag ikke berørt>" And _
ARK2 - CELLE C12: Range("c12").Value = "<lag ikke berørt>" And _
ARK2 - CELLE C13:Range("c13").Value = "<lag ikke berørt>" And _
ARK2 - CELLE C14:Range("c14").Value = "<lag ikke berørt>" And _
ARK2 - CELLE C15:Range("c15").Value = "<lag ikke berørt>" And _
ARK2 - CELLE C16:Range("c16").Value = "<lag ikke berørt>" And _
ARK2 - CELLE C17:Range("c17").Value = "<lag ikke berørt>" And _
ARK2 - CELLE C18:Range("c18").Value = "<lag ikke berørt>" Then

Rows("10").EntireRow.Hidden = True
Else
Rows("10").EntireRow.Hidden = False
End If

End Sub
Avatar billede store-morten Ekspert
14. november 2011 - 18:18 #8
Sub skjul_overskriften()

If Sheets("Ark2").Range("c11").Value = "<lag ikke berørt>" And _
Sheets("Ark2").Range("c12").Value = "<lag ikke berørt>" And _
Sheets("Ark2").Range("c13").Value = "<lag ikke berørt>" And _
Sheets("Ark2").Range("c14").Value = "<lag ikke berørt>" And _
Sheets("Ark2").Range("c15").Value = "<lag ikke berørt>" And _
Sheets("Ark2").Range("c16").Value = "<lag ikke berørt>" And _
Sheets("Ark2").Range("c17").Value = "<lag ikke berørt>" And _
Sheets("Ark2").Range("c18").Value = "<lag ikke berørt>" Then

Rows("10").EntireRow.Hidden = True
Else
Rows("10").EntireRow.Hidden = False
End If

End Sub
Avatar billede LS-Falster Juniormester
16. november 2011 - 15:28 #9
Hej Store-Morten

Nu har jeg bakset med din løsning og til sidst fundet ud af, hvad der giver problemer. Hvis jeg kører din løsning og søger på "<lag ikke berørt>", virker det ikke. Jeg har lavet en test, hvor jeg har undladt de 2 klammer <>, og så virker det. Problemet er bare, at de resultater, som indsættes i ark2 alle indeholder <klammer> omkring ordet. Er der en mulighed for at komme omkring dette?

Mvh Lars
Avatar billede Ialocin Novice
17. november 2011 - 21:12 #10
Hej Lars

Tak for tanken i #6, men pointene er Store-Mortens ... og det er helt i orden herfra :o)

Med venlig hilsen, Nicolai
Avatar billede store-morten Ekspert
17. november 2011 - 21:38 #11
De resultater, som indsættes i ark2 alle indeholder <klammer> omkring ordet.
Er du sikker på at det er < (mindre end) og > (større end) ?
Prøv evt. at kopier resultatet på ark2 og sæt ind i koden.
If Sheets("Ark2").Range("c11").Value = "<lag ikke berørt>" And _    osv...
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