Print side | Luk vindue

Combobox værdi

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=2841
Udskrevet den: 03.Dec.2024 kl. 18:57


Emne: Combobox værdi
Besked fra: Matlock
Emne: Combobox værdi
Posteringsdato: 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





Svar:
Besked fra: Allan
Posteringsdato: 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


Besked fra: BQardi
Posteringsdato: 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...


Besked fra: BQardi
Posteringsdato: 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")


Besked fra: Allan
Posteringsdato: 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


Besked fra: Matlock
Posteringsdato: 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?


Besked fra: BQardi
Posteringsdato: 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. /topic662.html - 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?


Besked fra: Matlock
Posteringsdato: 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.


Besked fra: BQardi
Posteringsdato: 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



Print side | Luk vindue