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


Emne lukketCombobox værdi

 Besvar Besvar
Forfatter
Matlock Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 25.Mar.2012
Land: Danmark
Status: Offline
Point: 49
Direkte link til dette indlæg Emne: Combobox værdi
    Sendt: 25.Nov.2016 kl. 07:19
Hej 
Nu er det længe siden jeg har rodet med VBA, men håber i kan hjælpe

Jeg har en Userform med en Combobox til at vælge ugenr. Jeg vil gerne have at hvis jeg vælge uge 1, viser den en dato(celleværdi) i en textbox nedenunder.
Håber i kan hjælpe
Vh Matlock


Til top



Til top
Allan Se dropdown
Forum Admin
Forum Admin
Avatar
Forum Admin

Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10329
Direkte link til dette indlæg Sendt: 25.Nov.2016 kl. 10:10
Hej Matlock
Hvis din Combobox hedder Combobox1 og dine datofelter hedder Mandag, Tirsdag, Onsdag osv, kan du lægge denne kode direkte ind i dit værktøj.
Mht årstal, tager koden det for givet at du befinder dig i indeværende år. Hvis ikke, så skal du rette variablen Aar.
 
Aar = Year(Date)
Ugenr = Combobox1.Value
Mandag = Format(CDate(Ugenr * 7 + DateSerial(Aar, 1, 1) - 4), "dd-mm-yyyy")
Tirsdag = Format(CDate(Mandag) + 1, "dd-mm-yyyy")
Onsdag = Format(CDate(Mandag) + 2, "dd-mm-yyyy")
Torsdag = Format(CDate(Mandag) + 3, "dd-mm-yyyy")
Fredag = Format(CDate(Mandag) + 4, "dd-mm-yyyy")
Lørdag = Format(CDate(Mandag) + 5, "dd-mm-yyyy")
Søndag = Format(CDate(Mandag) + 6, "dd-mm-yyyy")
 
//Allan
Til top
BQardi Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 11.Nov.2016
Land: Danmark
Status: Offline
Point: 100
Direkte link til dette indlæg Sendt: 25.Nov.2016 kl. 17:58
Hej Allan

Du er også nødt til at tage højde for at datoen for mandagen i uge 1 er forskellig fra år til år...

Så i 2017 hedder det mandag d. 02-01-2017, men din funktion vil vise mandag d. 04-01-2017...
Til top
BQardi Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 11.Nov.2016
Land: Danmark
Status: Offline
Point: 100
Direkte link til dette indlæg Sendt: 25.Nov.2016 kl. 20:11
Mit forslag (jeg har mere eller mindre bare tilføjet et loop til Allans funktion):
aar = Year(Date)
ugenr = Combobox1.Value
For i = -2 To 4 'Datoer for mandage i uge 1 kan være fra 29. dec. til 04. jan. ifølge ISO standard
    startdato = DateSerial(aar, 1, i)
    'Når mandag er fundet hopper vi ud af loop og har korrekt dato for mandag i uge 1 for det givne år (aar)
    If Weekday(startdato, vbMonday) = 1 Then Exit For
Next i
'Da vi allerede har fundet den korrekte dato for mandagen i uge 1, må vi trække 1 fra ugenr, da
'mandag i uge 1 skal hedde startdato+0, mandag i uge 2 skal hedde startdato+7, osv.
Mandag = Format(CDate(startdato + (ugenr - 1) * 7), "dd-mm-yyyy")
Tirsdag = Format(CDate(Mandag) + 1, "dd-mm-yyyy")
Onsdag = Format(CDate(Mandag) + 2, "dd-mm-yyyy")
Torsdag = Format(CDate(Mandag) + 3, "dd-mm-yyyy")
Fredag = Format(CDate(Mandag) + 4, "dd-mm-yyyy")
Lørdag = Format(CDate(Mandag) + 5, "dd-mm-yyyy")
Søndag = Format(CDate(Mandag) + 6, "dd-mm-yyyy")
Til top
Allan Se dropdown
Forum Admin
Forum Admin
Avatar
Forum Admin

Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10329
Direkte link til dette indlæg Sendt: 26.Nov.2016 kl. 16:41
Citat: BQardi BQardi skrev:

Hej Allan

Du er også nødt til at tage højde for at datoen for mandagen i uge 1 er forskellig fra år til år...

Så i 2017 hedder det mandag d. 02-01-2017, men din funktion vil vise mandag d. 04-01-2017...


Du har fuldstændig ret,
Det gik lidt stærkt
Ideen om at tilføje et loop som du gør, er en rigtig god måde at løse den udfordring på

//Allan
Til top
Matlock Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 25.Mar.2012
Land: Danmark
Status: Offline
Point: 49
Direkte link til dette indlæg Sendt: 30.Nov.2016 kl. 15:41
Nogen forslag til hvordan jeg får daten overført på den rigtig dato i kalenderen, uden at skulle indtaste 52 Mandage, tirsdage osv.

Har lavet en års kalender det skal inde i?
Til top
BQardi Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 11.Nov.2016
Land: Danmark
Status: Offline
Point: 100
Direkte link til dette indlæg Sendt: 01.Dec.2016 kl. 13:14
Jeg forstår desværre ikke hvad du gerne vil.
Prøv at være mere specifik, eller rettere vær så specifik som overhovedet muligt. Jo flere detaljer du kommer med, desto hurtigere og fyldestgørende et svar kan du forvente at få...

Det svarer lidt til at stille et spørgsmål a la dette:
Hej, jeg har en sort bil. Hvilken type brændstof skal jeg bruge?Wacko

Evt. upload dit projekt (din Excel fil), så vi 100% og lynhurtigt kan følge med i hvad du prøver på og dermed kan hjælpe dig i forhold til dit specifikke behov...

Jeg kunne eksempelvis godt tænke mig at vide hvordan denne kalender er udformet.
Hvor har du lavet den (i et ark eller en UserForm)?
Jeg går ud fra at det er i forbindelse med dit tidligere spørgsmål, hvor du slår et ugenummer op, får de korrekte datoer og derefter skal bruge disse datoer til at sætte ind i din kalender, yes?
Hvordan vil du så plukke disse datoer ud? Har du en knap ud for hver ugedag?
Eller måske skal alle syv datoer sættes ind i kalenderen ved tryk på en knap?
Eller skal datoer sættes ind i kalenderen direkte ved opslag af ugenr?
Til top
Matlock Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 25.Mar.2012
Land: Danmark
Status: Offline
Point: 49
Direkte link til dette indlæg Sendt: 02.Dec.2016 kl. 11:05
Hej
Ja det gik nok lidt stærkt

Jeg har et ark der hedder "ÅR" hvori der ligger en kalender, hvor min data fra userformen skal overi.



Gem funktionen i userformen skal smide timerne fra de valgte datoer over i kalenderen
Min userform ser sådan ud

Jeg kan sagtens gøre det ved at skrive denne kode

men kunne være fedt hvis man kunne gøre det smartere, da jeg ellers skal skrive koden for 52 mandage,tirsdage osv.
Håber det er forståligt og i kan hjælpe.
Til top
BQardi Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 11.Nov.2016
Land: Danmark
Status: Offline
Point: 100
Direkte link til dette indlæg Sendt: 02.Dec.2016 kl. 13:48
Jeg ville starte med at ændre navnene på objekterne så de følger konventionen af dine andre objektnavne:

Mandag, Tirsdag, osv.
til
f.eks. cboUgedag1, cboUgedag2, osv.

Så kan du nemlig referere dem via et loop og gøre koden en hel del simplere:
Noget a la dette:
Private Sub cmdGem_Click()
Dim i As Long, MonthRow As Long, dte As String
With Worksheets("År")
    For i = 1 To 7
        'Find rækken med dage: måned 1 * 5 - 2 = række 3, måned 2 * 5 - 2 = række 8
        MonthRow = (Month(Me.Controls("cboUgedag" & i).Value)) * 5 - 2
        'Og for at kunne loop'e må objekterne navngives med samme navn efterfulgt af en numerisk værdi
        'F.eks. cboUgedag1 i stedet for Mandag, cboUgedag2 i stedet for Tirsdag, osv.
        dte = Me.Controls("cboUgedag" & i).Text
        With .Range("A" & MonthRow).EntireRow
            'Find dagen og indsæt værdierne under
            With .Find(Day(dte), , xlValues, xlWhole)
                .Offset(1, 0).Value = Me.Controls("cboTimer" & i).Text
                .Offset(2, 0).Value = Me.Controls("cboAfs" & i).Text
            End With
        End With
    Next i
End With
End Sub
Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

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