Avatar billede Slettet bruger
05. december 2011 - 17:10 Der er 20 kommentarer og
1 løsning

VBA - Skjul visse rækker/kolonner alt efter indhold i drop down

Jeg har 2 felter med drop-down-lister.
B9 og B10.

Når der vælges en værdi i B9, skal alle rækker fra 13-198, hvor B-feltet (b13, b14, b15 osv) ikke indeholder værdien skjules.

Når der vælges en værdi i B10, skal alle kolonner fra C-BZ, hvor række 12 (c12, d12, e12 osv) ikke indeholder værdien skjules.

Jeg er ret øvet i formler, men det ser ud som om at dette kun kan løses via VBA.

Nogen der kan hjælpe?
Avatar billede supertekst Ekspert
05. december 2011 - 17:46 #1
Hvordan er DropDown-listerne konstrueret?
Avatar billede supertekst Ekspert
05. december 2011 - 23:44 #2
Dim flag As Boolean
Private Sub Worksheet_Activate()
    flag = False
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim kol As Object, ræk As Long, kolonne As String, c As String, p As Byte
    If flag = False Then
        Application.ScreenUpdating = False
   
        If Target.Address = "$B$9" And Target.Text <> "" Then
            flag = True
            For ræk = 13 To 198
                If Range("B" & ræk) = "" Then
                    Rows(CStr(ræk) & ":" & CStr(ræk)).Select
                    Selection.EntireRow.Hidden = True
                End If
            Next ræk
        Else
            If Target.Address = "$B$10" And Target.Text <> "" Then
                flag = True
                For Each kol In Range("C12:BZ12").Columns
                    If kol.Value = "" Then
Rem Isoler kolonne-bogstav
                        c = Mid(kol.Address, 2)
                        p = InStr(c, "$")
                        kolonne = Left(c, p - 1)
                        Columns(kolonne & ":" & kolonne).Select
                        Selection.EntireColumn.Hidden = True
                    End If
                Next
            End If
        End If
    End If
    flag = False
End Sub
Avatar billede Slettet bruger
06. december 2011 - 08:56 #3
Drop down er lavet vha. datavalidering, hvor jeg har valgt lister.

Jeg har desværre ikke mulighed for at teste før onsdag, men jeg vil vende tilbage der.

Et enkelt spørgsmål ud fra din kode.

Hvis jeg først vælger en værdi, så skjules alle ikke relevante rækker/kolonner. Hvad hvis jeg derefter vælger en anden værdi?

Vil de rækker der så skal være synlige blive lavet synlige igen?
Avatar billede supertekst Ekspert
06. december 2011 - 09:03 #4
Hej Kfisker

I min model har jeg også anvendt datavalidering.
Der er i koden ikke taget højde for hvilken værdi, der er valgt - idet jeg ikke mener at dette var præciseret.

Betragt koden som et udgangspunkt..
Avatar billede supertekst Ekspert
06. december 2011 - 09:05 #5
PS: Jeg ser lige nu, at du faktisk nævner en eksakt værdi og ikke - som jeg læste det - at cellen har værdi".

Dette ændre jeg til i morgen..
Avatar billede Slettet bruger
06. december 2011 - 09:09 #6
Super, min vidne omkring VBA kan stå på bagsiden af et meget lille frimærke.
Avatar billede supertekst Ekspert
06. december 2011 - 15:45 #7
OBS: kan godt være det må vente lidt - men jeg skal nok vende tilbage..
Avatar billede supertekst Ekspert
06. december 2011 - 18:01 #8
Rem VERSION 2
Rem =========
Dim flag As Boolean
Private Sub Worksheet_Activate()
    flag = False
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim kol As Object, ræk As Long, kolonne As String, c As String, p As Byte, valgtVærdi As Integer
    Application.ScreenUpdating = False
   
    If flag = False Then
        If Target.Address = "$B$9" Then
            valgtVærdi = Target.Value
            For ræk = 13 To 198
                flag = True
                Rows(CStr(ræk) & ":" & CStr(ræk)).Select
                If Range("B" & ræk).Value <> valgtVærdi Then
                    Selection.EntireRow.Hidden = True
                Else
                    Selection.EntireRow.Hidden = False
                End If
            Next ræk
        Else
            If Target.Address = "$B$10" Then
                valgtVærdi = Target.Value
                For Each kol In Range("C12:BZ12").Columns
                    flag = True
Rem Isoler kolonne-bogstav
                    c = Mid(kol.Address, 2)
                    p = InStr(c, "$")
                    kolonne = Left(c, p - 1)
                    Columns(kolonne & ":" & kolonne).Select
                    If kol.Value <> valgtVærdi And valgtVærdi <> 0 Then
                        Selection.EntireColumn.Hidden = True
                    Else
                        Selection.EntireColumn.Hidden = False
                    End If
                Next
                Range("B10") = ""
            End If
        End If
    End If
    flag = False
End Sub
Avatar billede Slettet bruger
07. december 2011 - 08:03 #9
Når jeg ændrer værdien i B9 eller B10 melder den fejl på denne linje:
valgtVærdi = Target.Value

Fejlbeskeden er:
Run-time error '13':
Type Mismatch
Avatar billede supertekst Ekspert
07. december 2011 - 08:57 #10
Hvilke værdier er der f.eks. anført i listerne vedr. B9 & B10?

I min model har der kun været tal.
Avatar billede supertekst Ekspert
07. december 2011 - 09:10 #11
Vedr linjen:
Dim kol As Object, ræk As Long, kolonne As String, c As String, p As Byte, valgtVærdi As Integer

prøv at slette "As Integer" efter valgtVærdi

til:

Dim kol As Object, ræk As Long, kolonne As String, c As String, p As Byte, valgtVærdi
Avatar billede Slettet bruger
07. december 2011 - 09:20 #12
Værdierne er navne.

Det hjalp at sltte "As Integer".

Jeg har to problemer tilbage:

1. Når jeg vælger et navn i feltet B10 bliver alt skjult som det skal. Dog er feltet B10 blankt efterfølgende.

2. Jeg vil gerne kunne vise alle kolonner/rækker igen. Kan der f.eks laves således jeg kan klikke på en knap/et link i et fejl og alt vises igen?
Avatar billede Slettet bruger
07. december 2011 - 09:26 #13
Det først problem fik jeg løst ved at slette linjen:
Range("B10") = ""
Avatar billede supertekst Ekspert
07. december 2011 - 09:38 #14
Fint du fik løst det første.

Det andet problem kan løses på forskellige måder:
f.eks. ved at dobbeltklikke på en bestem celle - hvilken B8? - eller?
Avatar billede Slettet bruger
07. december 2011 - 11:06 #15
B11 vil være at foretrække. Så kan jeg lave en tekst til cellen.
Avatar billede supertekst Ekspert
07. december 2011 - 12:30 #16
Rem VERSION 3
Rem =========
Dim flag As Boolean
Private Sub Worksheet_Activate()
    flag = False
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ActiveSheet.Rows.Hidden = False
    ActiveSheet.Columns.Hidden = False
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim kol As Object, ræk As Long, kolonne As String, c As String, p As Byte, valgtVærdi
    Application.ScreenUpdating = False
   
    If flag = False Then
        If Target.Address = "$B$9" Then
            valgtVærdi = Target.Value
            For ræk = 13 To 198
                flag = True
                Rows(CStr(ræk) & ":" & CStr(ræk)).Select
                If Range("B" & ræk).Value <> valgtVærdi Then
                    Selection.EntireRow.Hidden = True
                Else
                    Selection.EntireRow.Hidden = False
                End If
            Next ræk
        Else
            If Target.Address = "$B$10" Then
                valgtVærdi = Target.Value
                For Each kol In Range("C12:BZ12").Columns
                    flag = True
Rem Isoler kolonne-bogstav
                    c = Mid(kol.Address, 2)
                    p = InStr(c, "$")
                    kolonne = Left(c, p - 1)
                    Columns(kolonne & ":" & kolonne).Select
                    If kol.Value <> valgtVærdi And valgtVærdi <> 0 Then
                        Selection.EntireColumn.Hidden = True
                    Else
                        Selection.EntireColumn.Hidden = False
                    End If
                Next
                Range("B10") = ""
            End If
        End If
    End If
    flag = False
End Sub
Avatar billede supertekst Ekspert
07. december 2011 - 13:26 #17
OBS:

Glemte lidt i følgende - hvis du tilføjer det med FED:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Address = "$B$11" Then
        ActiveSheet.Rows.Hidden = False
        ActiveSheet.Columns.Hidden = False
    End If
End Sub
Avatar billede Slettet bruger
07. december 2011 - 13:33 #18
Super, så kom det hele til at virke som ønsket.

Læg et svar og der er point på vej.
Avatar billede supertekst Ekspert
07. december 2011 - 13:57 #19
Fint - der er lagt svar på #16
Avatar billede Slettet bruger
07. december 2011 - 14:30 #20
Arh, det lagde jeg ikke lige mærke til.

Tak for hjælpen.
Avatar billede supertekst Ekspert
07. december 2011 - 14:41 #21
Selv tak - en fornøjelse..
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