03. september 2003 - 13:49Der er
16 kommentarer og 2 løsninger
Vis/skjul afh. af celle
Hej,
Jeg skal lave et ark som flere personer skal indrapportere i. Jeg ville dog meget gerne have det sådan at de enkelte kun så de celler som var relevante for dem.
Altså - jeg ville meget gerne kunne skjule/vise rækker alt efter hvilket navn der vælges i en menu.
Sagtens, men du skal spørge BAK eller retaxes, eller janvogt, jkrons eller flemmingdahl. de kan ryste det ud af ærmet. jeg har ikke tid i dag (og bruger for lang tid på at regne det ud)
Jeg har lavet et eksempel til din inspiration. Navnet læses fra en ComboBox1 på et Excel-ark. Der er så defineret et array med de felter, den enkelte må have lov til at skrive i Excel-arket. Den kan selvfølgelig udbygges, så det i stedet er rækker der må vises i stedet for celler.
Sub Beskyt() Dim område As Variant ActiveSheet.Unprotect Cells.Locked = True
Select Case ComboBox1.Text Case "Fobian" område = Array("a1", "a2") Case "MRG" område = Array("b1", "b2") End Select
For i = 0 To UBound(område) Range(område(i)).Locked = False Next
Hvis du har mange navne kan du evt. kombinere med celler. Denne makro skjuler alle de rækker hvor der ikke står det relavante navn i kolonne A. (små bogstaver) - fra række 5. Den aktiveres når filen åbnes. ___________________________________ Sub auto_open() Application.ScreenUpdating = False ActiveSheet.Unprotect Range("a:a").Select Selection.EntireRow.Hidden = False Dim navn As String navn = InputBox("Indtast navn") Dim omrode As Range Set omrode = Range("a5:a500") ' antal rækker hvor relevant For Each cell In omrode cell.Select If Selection = navn Then Else Selection.EntireRow.Hidden = True End If Next ActiveSheet.Protect End Sub
fobian-> Bliver det ikke lidt omstændeligt, hvis der er mange celler for den enkelte bruger?
Denner løsning er baseret på, at A1 kolonnen i hver række indeholdeer navnet på den person, der må skrive i rækken. I en comboboks vælges den aktuelle person. Derefter skjules alle de rækker vedkommende må se. selve koden skal ligge på komboboksen:
Private Sub ComboBox1_Change() r = ComboBox1.Value For Each c In ActiveSheet.UsedRange.Columns("A:A").Cells If c.Value = r Then c.EntireRow.Hidden = False Else: c.EntireRow.Hidden = True End If Next c Range("A65000").Select Selection.End(xlUp).Select End Sub
Det afhænger selvfølgelig af hvor mange celler eller rækker der er tale om der skal vises for den enkelte person. Hvis der er mange rækker, kan det være en fordel at lave en matrix i regnearket, som indeholder navne som overskrift. Derefter kan man afkrydse hvilke rækker der skal vises for hvert navn. Derefter oprettes en macro, som gennemløber kolonnen med medarbejdernavnet og som skjuler de rækker, hvor der ikke er sat kryds.
Jeg har nu: Private Sub ComboBox1_Change() ComboBox1.Text = "Vælg person" ComboBox1.AddItem "Christian" ComboBox1.AddItem "Andre"
r = ComboBox1.Value For Each c In ActiveSheet.UsedRange.Columns("A:A").Cells If c.Value = r Then c.EntireRow.Hidden = False Else: c.EntireRow.Hidden = True End If Next c Range("A100").Select Selection.End(xlUp).Select End Sub
Men den skjuler alle rækker (1-100) uanset hvad jeg vælger...
Hvor går det galt ? Skal værdierne i kolonne A have specielt format ? Derudover er listen i combobox gentagelse af christian og andre flere gange...hvorfor ?
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.