Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Arrangementer   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketVærdi i dropdown ud fra en liste

 Besvar Besvar Side  12>
Forfatter
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Emne: Værdi i dropdown ud fra en liste
    Sendt: 23.Dec.2014 kl. 11:40
Hej Forum

- Jeg bruger Data - Datavalidering - Liste til at vælge en værdi fra et kildeområde.
- Værdien fra kildeområdet indsættes i alle de celler, der er defineret som dropdown listen.
- Cellerne, hvor værdierne skal indsættes, er fordelt over dagene, hen over 14 mdr.
- Hver måned er separeret i hvert sit Range.

Er det muligt at lave koden i VBA hvor:
- Kildeområdet defineres og skal vises i dropdown.
- Dropdown defineres i hvert sit Range i hver måned.
- Tomme celler fra kildeområdet udelades, så dataene vises i en ubrudt liste i dropdown.
- Hvis der skrives en anden værdi i dropdown, end den der er defineret i kilden = MsgBox "Ugyldig".

Hvis koden kan laves, så den placeres i den arkfane den skal virke på, kan man undlade at skulle indsætte den i hver eneste celle hen over de 14 mdr.
Dette ville selvfølgelig være at foretrække.

Se vedhæftede eksempel med forklaring.
uploads/1125/VBA_Dropdown_-_Værdi_ud_fra_liste.xlsm

På forhånd tak.
Glædelig Jul og Godt Nytår.

Ib


Til top



Til top
excelent Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 12.Apr.2011
Land: DK
Status: Offline
Point: 2171
Direkte link til dette indlæg Sendt: 27.Dec.2014 kl. 18:31
prøv med følgende :
 
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C4:C17")) Is Nothing Then Exit Sub
Dim t, List
  For t = 4 To 17
    If Cells(t, "C") <> "" Then List = List & "," & Cells(t, "C")
  Next
  With Range("F4:F8,F10:F14,F16:F20,F22:F26").Validation ' tilføj selv flere ranges
    .Delete
    .Add xlValidateList, Formula1:=List
    .InCellDropdown = True
  End With
End Sub
 
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 27.Dec.2014 kl. 18:56
Hej Excelent.

Tak - Det ser rigtigt intersant ud.
Lige nu sidder jeg med nogle dumme MsgBoxe, jeg ikke kan få til at åbne på de rigtige kommandoer, men jeg vil prøve din kode lidt senere, når jeg får løst MsgBox problemet.

Mvh.
Ib
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 27.Dec.2014 kl. 20:12
Hej igen Excelent.

Fantastisk Clap Det virker perfekt og lige netop, hvad jeg havde brug for Thumbs Up

Tusind tak og gældelig bagjul og godt nytår Smile

Mvh.
Ib 
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 28.Dec.2014 kl. 06:57
Hej Excelent.

Jeg har allerede en Sub Worksheet_Change med en kode i arkfanen og kan derfor ikke lave en tilsvarende ny Sub, med denne kode.
I stedet har jeg bare tilføjet koden under den første kode i samme Sub.

Koden virkede i test arket, men efter at have indføjet den i arkfanen, udelader den ikke mellemrum i listen.
Hvis jeg fjerne den første kode Ændr klokkeslæt i ark 1, kører den heller ikke.

Hvad definerer jeg forkert ?
- List Range = ("AB9:AB48")
- Dropdown Range = indstillet korrekt.

Her er begge koder i samme Sub.
Den ny kode nederst.

Mvh.
Ib

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

'*' Ændr klokkeslæt i ark 1
 Dim TimeStr As String

 On Error GoTo EndMacro
 If Intersect(Target, Sheets(1).Range("N9:O487, Q9:R487, T9:U487")) Is Nothing Then Exit Sub
 If Target.Cells.Count > 1 Then Exit Sub
 If Target.Value = "" Then Exit Sub

 Application.EnableEvents = False
 With Target
 If .HasFormula = False Then
     Select Case Len(.Value)
         Case 1 ' e.g., 1 = 00:01 AM
             TimeStr = "00:0" & .Value
         Case 2 ' e.g., 12 = 00:12 AM
             TimeStr = "00:" & .Value
         Case 3 ' e.g., 735 = 7:35 AM
             TimeStr = Left(.Value, 1) & ":" & Right(.Value, 2)
         Case 4 ' e.g., 1234 = 12:34
             TimeStr = Left(.Value, 2) & ":" & Right(.Value, 2)
         Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
             TimeStr = Left(.Value, 1) & ":" & Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
         Case 6 ' e.g., 123456 = 12:34:56
             TimeStr = Left(.Value, 2) & ":" & Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
         Case Else
             Err.Raise 0
     End Select
     .Value = TimeValue(TimeStr)
 End If
 End With
 Application.EnableEvents = True
 Exit Sub
 
EndMacro:
ActiveCell.Offset(-1, 0).Select: Selection = ""
'Dialog Message
        QuestionToMessageBox = "   Ugyldig indtastning !" & vbNewLine & vbNewLine & "   Skriv altid klokkeslættet som et helt tal uden separator." & vbNewLine & "   1        =   00:01" & vbNewLine & "   12      =   00:12" & vbNewLine & "   123    =   01:23" & vbNewLine & "   1234  =   12:34"
'MsgBox Title
        YesOrNoAnswerToMessageBox = MsgBox(QuestionToMessageBox, vbOKOnly + vbInformation, "Ugyldig indtastning")
        
ActiveSheet.Unprotect Password:="Bus"
ActiveCell.NumberFormat = "hh:mm"
ActiveSheet.Protect Password:="Bus"
Application.EnableEvents = True


'*'------------------------------------------------------------------------------------

'*' List Range i Fane Indtast vagter
If Intersect(Target, Range("AB9:AB48")) Is Nothing Then Exit Sub
Dim t, List
  For t = 9 To 48
    If Cells(t, "AB") <> "" Then List = List & "," & Cells(t, "AB")
  Next

'*' Range dropdown liste i Ændr vagter
  With Range("L9:L38,L43:L73,L78:L108,L113:L142,L147:L177,L182:L211,L216:L246,L251:L281,L286:L314,L319:L349,L354:L383,L388:L418,L423:L452,L457:L487").Validation ' tilføj selv flere ranges
    .Delete
    .Add xlValidateList, Formula1:=List
    .InCellDropdown = True
  End With


End Sub


Til top
excelent Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 12.Apr.2011
Land: DK
Status: Offline
Point: 2171
Direkte link til dette indlæg Sendt: 28.Dec.2014 kl. 12:58
prøv :
 
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("AB9:AB48")) Is Nothing Then GoTo dvList
'*' Ændr klokkeslæt i ark 1
 Dim TimeStr As String

 On Error GoTo EndMacro
 If Intersect(Target, Sheets(1).Range("N9:O487, Q9:R487, T9:U487")) Is Nothing Then Exit Sub
 If Target.Cells.Count > 1 Then Exit Sub
 If Target.Value = "" Then Exit Sub

 Application.EnableEvents = False
 With Target
 If .HasFormula = False Then
     Select Case Len(.Value)
         Case 1 ' e.g., 1 = 00:01 AM
             TimeStr = "00:0" & .Value
         Case 2 ' e.g., 12 = 00:12 AM
             TimeStr = "00:" & .Value
         Case 3 ' e.g., 735 = 7:35 AM
             TimeStr = Left(.Value, 1) & ":" & Right(.Value, 2)
         Case 4 ' e.g., 1234 = 12:34
             TimeStr = Left(.Value, 2) & ":" & Right(.Value, 2)
         Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
             TimeStr = Left(.Value, 1) & ":" & Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
         Case 6 ' e.g., 123456 = 12:34:56
             TimeStr = Left(.Value, 2) & ":" & Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
         Case Else
             Err.Raise 0
     End Select
     .Value = TimeValue(TimeStr)
 End If
 End With
 Application.EnableEvents = True
 Exit Sub
 
EndMacro:
ActiveCell.Offset(-1, 0).Select: Selection = ""
'Dialog Message
        QuestionToMessageBox = "   Ugyldig indtastning !" & vbNewLine & vbNewLine & "   Skriv altid klokkeslættet som et helt tal uden separator." & vbNewLine & "   1        =   00:01" & vbNewLine & "   12      =   00:12" & vbNewLine & "   123    =   01:23" & vbNewLine & "   1234  =   12:34"
'MsgBox Title
        YesOrNoAnswerToMessageBox = MsgBox(QuestionToMessageBox, vbOKOnly + vbInformation, "Ugyldig indtastning")
       
ActiveSheet.Unprotect Password:="Bus"
ActiveCell.NumberFormat = "hh:mm"
ActiveSheet.Protect Password:="Bus"
Application.EnableEvents = True
 

'*'------------------------------------------------------------------------------------

'*' List Range i Fane Indtast vagter
Exit Sub
dvList:
Dim t, List
  For t = 9 To 48
    If Cells(t, "AB") <> "" Then List = List & "," & Cells(t, "AB")
  Next

'*' Range dropdown liste i Ændr vagter
  With Range("L9:L38,L43:L73,L78:L108,L113:L142,L147:L177,L182:L211,L216:L246,L251:L281,L286:L314,L319:L349,L354:L383,L388:L418,L423:L452,L457:L487").Validation ' tilføj selv flere ranges
    .Delete
    .Add xlValidateList, Formula1:=List
    .InCellDropdown = True
  End With
 

End Sub
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 28.Dec.2014 kl. 23:12
Hej Excelent.

Koden virker og udelader tomme celle i dropdown, hvis jeg indtaster List direkte i ark1.

Men List står oprindelig i ark4 og udfyldes via UserForm/TextBoxe, hvor der indtastes i.
Alle de vagter der køres.

Hvis jeg overfører List direkte til ark1 fra ark4 vha. lighedstegn, overfører den værdien 0 [nul] fra de tomme celler og de vises som værdien 0 i dropdown.
- ark1.AB9 = ark4.B17
ark1.AB10 = ark4.B18
- osv.

Hvis jeg overfører List til ark1 fra ark4 vha. formel, overfører den en tom værdi fra de tomme celler og de vises som tomme mellemrum i dropdown.
- Formel i ark1.AB9:  =hvis(Ark4.B17="";"";Ark4.B17)
- osv.

Jeg har prøvet flere forskellige ting i koden, men får Bug med alt jeg prøver.
- Jeg skal enten have koden til at hente List direkte fra Ark4. Sheets(4).Range("B17:B84").
- Eller koden skal overføres til ark1, uden tomme værdier.

Den oprindelige List i ark4 er delt op i tre Range, men det betyder ingenting, hvis den er sammenhængende som vist ovenfor.
Sheets(4).Range("B17:B36,B46:B55,B75:B84")

Har du nogle gode ideer.

Mvh.
Ib
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 29.Dec.2014 kl. 09:30
Jeg kom til at tænke på, når Listen er i ark4, skal koden selvfølgelig også stå i ark4 og ikke ark1, hvor Dropboxene er.
Det prøver jeg, når jeg kommer hjem fra job.
Jeg skal nok give besked om resultatet her.

Mvh.
Ib
Til top
excelent Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 12.Apr.2011
Land: DK
Status: Offline
Point: 2171
Direkte link til dette indlæg Sendt: 29.Dec.2014 kl. 09:55
En hændelses kode trikker ikke når en celles ændres via en formel så den metode kan ikke bruges
 
Du skal indsætte koden i det ark hvor dvVærdierne indsættes (ark4) ellers køres den ikke
 
Private Sub Worksheet_Change(ByVal Target As Range)
'** Rangen i linien herunder skal svare til den range hvor du overfører værdier via userformen
If Not Intersect(Target, Sheets("Ark4").Range("AB9:AB48")) Is Nothing Then GoTo dvList
' din anden kode som jeg ikke har testet
Exit Sub
dvList:
Dim t, List
  For t = 9 To 48
    If Cells(t, "AB") <> "" Then List = List & "," & Cells(t, "AB")
  Next
  '** Rangen herunder skal svare til den range hvor dvListerne skal indsættes
  With Sheets("Ark1").Range("L9:L38,L43:L73,L78:L108,L113:L142,L147:L177,L182:L211,L216:L246,L251:L281,L286:L314,L319:L349,L354:L383,L388:L418,L423:L452,L457:L487").Validation
    .Delete
    .Add xlValidateList, Formula1:=List
    .InCellDropdown = True
  End With
End Sub
 
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 29.Dec.2014 kl. 21:27
Hmmmmm. Der sker en masse ting !!

Jeg har en Sub_Change kode (der ændre klokkeslæt) i både Kilde_Sheets(4) og Dropdown_Sheets(1).
Det betyder dvKoden skal køre sammen med klokkeslæt koden i samme Sub.

Jeg har prøvet at lave en dropdown i både Sheets(1) og Sheets(4).
- Begge dropdown henter data fra Kilde_Sheets(4).
- dvKoden er indsat i Kilde_Sheets(4).

Source og Target i samme Sheet
- dvKoden kører ikke, hvis jeg har begge koder i samme Sub.

Source og Target i forskellige Sheets
- dvKoden kører slet ikke, hverken alene eller sammen med KlokkeslætsKoden.

Jeg har også prøvet både at adskille dvKoden med klokkeslætsKoden og at samle dem hver for sig.
Og når koden skulle kører på to forskellige Sheets, har jeg defineret Sheets.Range i dvKoden, både i Source og Target Range.

dvKoden adskilt af Klokkeslet
Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If Not Intersect(Target, Sheets(4).Range("B17:B84")) Is Nothing Then GoTo dvList

'*'------------------------------------------------------------------------------------
'*' KlokkeslætsKoden Start
'*' KlokkeslætsKoden Slut
'*'------------------------------------------------------------------------------------

dvList:

Dim t, List
  For t = 17 To 84
    If Cells(t, "B") <> "" Then List = List & "," & Cells(t, "B")
  Next

  With Sheets(1).Range("L9:L38,L43:L73,L78:L108,L113:L142,L147:L177,L182:L211,L216:L246,L251:L281,L286:L314,L319:L349,L354:L383,L388:L418,L423:L452,L457:L487").Validation
    .Delete
    .Add xlValidateList, Formula1:=List
    .InCellDropdown = True
  End With

End SuB

dvKoden samlet efter klokkeslæt
Private Sub Worksheet_Change(ByVal Target As Excel.Range)

'*'------------------------------------------------------------------------------------
'*' KlokkeslætsKoden Start
'*' KlokkeslætsKoden Slut
'*'------------------------------------------------------------------------------------

If Not Intersect(Target, Sheets(4).Range("B17:B84")) Is Nothing Then Exit Sub

Dim t, List
  For t = 17 To 84
    If Cells(t, "B") <> "" Then List = List & "," & Cells(t, "B")
  Next
 
 With Sheets(1).Range("L9:L38,L43:L73,L78:L108,L113:L142,L147:L177,L182:L211,L216:L246,L251:L281,L286:L314,L319:L349,L354:L383,L388:L418,L423:L452,L457:L487").Validation
    .Delete
    .Add xlValidateList, Formula1:=List
    .InCellDropdown = True
  End With

End SuB

Den måde jeg kan se koden ikke kører, er i Datavalideringsboksen når jeg åbner den.
Den opdaterer ikke linjerne nedenunder i selve valideringsboksen, men viser bare den Range jeg har defineret.
 .Delete
 .Add xlValidateList, Formula1:=List

Jeg har vedhæftet Test Dropdown 1.
- På ark1 kører koden som den skal.
- På ark2 er der både KlokkeslætsKode + dvKode.
  Bemærk den laver fejl, hvis klokkeslættet tastes med seperator - Det betyder ingenting i det "rigtige ark".


Mvh.
Ib
Til top
excelent Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 12.Apr.2011
Land: DK
Status: Offline
Point: 2171
Direkte link til dette indlæg Sendt: 29.Dec.2014 kl. 22:34
uploads/248/VBA_Dropdown_1_-_Værdi_ud_fra_liste_2.xlsm
dv koden virker fint her. den skal som tidligere nævnt kun være i det ark hvor kildedata indtastes/indsættes og ikke andre steder
Om klokke koden virker er en helt anden sag som hører til i et andet spørgsmål.
 
 
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 30.Dec.2014 kl. 03:58
Her deleter deleter dvKoden ikke tomme værdier i dropdown i ark2.
Heller ikke i den du vedhæftede.

Men jeg kom til at tænke på:
Jeg kan konkludere at, når klokkeslæt og dvKoden står i samme Sub i selve arket, deleter den ikke først tomme værdier fra Listen og herefter lister dem i dropdown, hvis Listen og Dropdown er på hver sin fane.

- I det rigtige ark bliver Listen udfyldt via UserForm.
- Klokkeslæts Koden kører og klokkeslættene bliver ligeledes udfyldt via UserFormen.

Hvis jeg laver et Modul med dvKoden og laver et Call til Modulet, når jeg lukke UserFormen på Gem knappen, kan jeg måske tvinge dvKoden til at køre, så den først fjerne tomme værdier fra Listen og herefter viser værdierne i Dropdown når den aktiveres.

Det vil jeg prøve, når jeg kommer hjem fra job Wink
Men nu først på job og klokken er snart 04, så jeg skal afsted - Hmmmmm..

Mvh.
Ib
Til top
excelent Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 12.Apr.2011
Land: DK
Status: Offline
Point: 2171
Direkte link til dette indlæg Sendt: 30.Dec.2014 kl. 15:03
Nej det gør den kun hvis koden laves til det
hvis du vil have dvListerne i Ark2 så skal du tilrette kode :
 
If Intersect(Target, Sheets("Ark2").Range("C4:C17")) Is Nothing Then Exit Sub
 
Hvis du vil have dvLister i begge ark, så skal den rettes til følgende :
 
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C4:C17")) Is Nothing Then Exit Sub
Dim t, List
  For t = 4 To 17
    If Cells(t, "C") <> "" Then List = List & "," & Cells(t, "C")
  Next
 
  With Range("F4:F8,F10:F14,F16:F20,F22:F26").Validation ' tilføj selv flere ranges
    .Delete
    .Add xlValidateList, Formula1:=List
    .InCellDropdown = True
  End With
  With Sheets("Ark2").Range("E10:E20").Validation ' tilføj selv flere ranges
    .Delete
    .Add xlValidateList, Formula1:=List
    .InCellDropdown = True
  End With
End Sub
 
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 31.Dec.2014 kl. 11:26
Hej Excelent.

I det "rigtige ark", hvor koden skal bruges
- Listen (Source) er på en fane.
- Dropdown (Target) på en anden fane.
- Der er klokkeslæts koder direkte i både Liste og Dropdown fanerne.

Der er vedhæftet et Test Ark 3 ---> uploads/1125/VBA_Dropdown_3_-_Værdi_ud_fra_liste.xlsm
Test arket indeholder både klokkeslæts kode og indtastnings UserForm, som i det "rigtige ark".
- Listen er på fane Ark1.
- Dropdown er på fane Ark2.
- Knap til at åbne UserFormen er på Ark2 og det er vha. UserFormen, Listen skal oprettes i det "rigtige ark".

Lige meget hvad, kommer der Bug på koden
If Not Intersect(Target, Sheets(1).Range("C4:C13")) Is Nothing Then

Jeg har prøvet forskelligt i test arket.
1. dvKoden direkte i Ark2 sammen med klokkeslæts koden.
   - Delt før og efter klokkeslæts koden med Then Goto dvlist.
   - Samlet  efter klokkslæts koden med Then Exit Sub.

2. Med et Call til Module dvKode.Dropdown, når UserFormens Gem knap aktiveres.
    Hvilket jeg syntes er den smarteste måde at lave det på.

3. At kalde Range = Sheets(1).Range og Sheets("Ark1"). Range osv.

Jeg håber du kan hjælpe.

Mvh.
Ib

Til top
excelent Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 12.Apr.2011
Land: DK
Status: Offline
Point: 2171
Direkte link til dette indlæg Sendt: 31.Dec.2014 kl. 12:46
ok jeg kikker på det i eftermiddag
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!
Til top
excelent Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 12.Apr.2011
Land: DK
Status: Offline
Point: 2171
Direkte link til dette indlæg Sendt: 31.Dec.2014 kl. 16:00
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 31.Dec.2014 kl. 17:58
Hej Excelent.

Svar til dit spørgsmål i dit vedhæftede ark.
Vha. UserFormen indtastes vagtnavne på vagter der køres på henholdsvis Hverdage, Lørdage og Søn- og Helligdage.
Der indtastes også vagtstart og vagtslut og alle disse indtastninger bruges af andre funktioner i regnearket.
Fanen er skjult og de celler der ikke modtager værdier fra UserFormen er beskyttede.

I en åben fane der kan tastes i, skal vagtnavnene tastes og disse skal være identisk med de vagtnavne, der blev tastet i den skjulte fane vha. UserFormen, for at lave beregningen korrekt.
Der kan måske være 30 forskellige vagtnavne og derfor en dropdown-liste i fanen, hvor der kan tastes i, så der ikke skal huske på, hvad hver enkelt vagt blev navngivet.


Koden virker perfekt, så lang tid Dropdown fanen er ubeskyttet
Men når fanen beskyttes kommer der Bug på .Add xlValidateList, Formula1:=List
Det er noget med en tillades der skal gives til at Datavalidering må editeres under beskyttet tilstand.
Tilladelse til  at Listen overføres til datavalideringen i stedet for den oprindelige Kilde-Range.

Vedhæftet, hvor Ark2 er klargjort til beskyttelse og Ark1 er beskyttet.
uploads/1125/VBA_Dropdown_5.xlsm

Men det giver så et andet problem.
Arkene bliver beskyttet af en kode der køres når Workbook starter og her skal tilladelsen også gives.
Private Sub Workbook_Activate()

    Dim myPassword As String
               
'*' ProtectAll
    myPassword = "PassWord"
    For Each sheet In ActiveWorkbook.Worksheets
    sheet.Protect Password:=myPassword
    Next sheet
               
End Sub

Men nok om det nu.
Nu er det nytårsaften og snart spisetid.

Godt Nytår Big smile

Mvh.
Ib

Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 01.Jan.2015 kl. 08:38
Hej Excelent.

Det var vist mig, der ikke tænkte mig om !
Jeg skal selvfølgelig bare fjerne beskyttelsen før koden og beskytte igen efter koden !

Koden kører perfekt Clap
Tusind tak for hjælpen.

Mvh.
Ib

Private Sub CommandButton1_Click()
    Dim myPassword As String
    Dim t, List
    myPassword = "Password"
    
    Unload Me
    Sheets(2).Unprotect Password:=myPassword
        
'*' Source dropdown
    For t = 4 To 13
    If Sheets(1).Cells(t, "C") <> "" Then List = List & "," & Sheets(1).Cells(t, "C")
    Next

'*' Target dropdown
    With Sheets(2).Range("E10:E20").Validation
        .Delete
        .Add xlValidateList, Formula1:=List
        .InCellDropdown = True
    End With
  
    Sheets(2).Protect Password:=myPassword
  
End Sub
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 02.Jan.2015 kl. 10:15
Hej Excelent.

I det rigtige ark, indtastes først dvListen vha. en UserForm.
Det er alle de vagter der køres og indtastningen er på en fane.

Herefter indtastes de nøjagtig samme vagt-navne i en turnes, fordelt, afhængig af hvordan turnussen er sat sammen.
Indtastningen foregår også vha. en UserForm og på en anden fane.

På en tredje fane, der kan tastes direkte i, listes turnussen og den gentager sig året ud.
På denne fane er der mulighed for "vagtbytte" og det var her .InCellDropdown skulle bruges.

-----------------------------

Jeg har prøvet at definere samme dvListe til at vises i Turnus-UserFormens ComboBoxe, ved at bruge dele af din første kode, men det går galt for mig.
Jeg tror dog, jeg har fat i "lidt" af det rigtige, men det er mig komplet ubegribeligt, hvor 3-tallet kommer fra i ComboBoxene !

Er du rar at kigge på den.
- Knapper til at åbne indtastning i både dvListen og ComboBoxene er på Ark2.
- Indtastningen i ComboBoxene vil listes i Ark2, kolonne H.
- Koden jeg kæmper med, står i UserForm_Dropdown.
- Opdateringen til Userformen er i Module UserForm_Update, men den kører.


På forhånd tak

Ib

Til top
excelent Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 12.Apr.2011
Land: DK
Status: Offline
Point: 2171
Direkte link til dette indlæg Sendt: 02.Jan.2015 kl. 12:00
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!
Til top
 Besvar Besvar Side  12>

Skift forum Forum tilladelser Se dropdown

© 2010 - 2024 Dansk Regneark Forum - en del af Excel-regneark.dk