Forfatter |
Emne Søg Emne funktioner
|
Matlock
Bronze bruger
Medlem: 25.Mar.2012
Land: Danmark
Status: Offline
Point: 49
|
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
|
|
|
|
|
Allan
Forum Admin
Forum Admin
Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10330
|
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
|
|
BQardi
Bronze bruger
Medlem: 11.Nov.2016
Land: Danmark
Status: Offline
Point: 100
|
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...
|
|
BQardi
Bronze bruger
Medlem: 11.Nov.2016
Land: Danmark
Status: Offline
Point: 100
|
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")
|
|
|
Allan
Forum Admin
Forum Admin
Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10330
|
Sendt: 26.Nov.2016 kl. 16:41 |
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
|
|
Matlock
Bronze bruger
Medlem: 25.Mar.2012
Land: Danmark
Status: Offline
Point: 49
|
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?
|
|
BQardi
Bronze bruger
Medlem: 11.Nov.2016
Land: Danmark
Status: Offline
Point: 100
|
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?
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?
|
|
Matlock
Bronze bruger
Medlem: 25.Mar.2012
Land: Danmark
Status: Offline
Point: 49
|
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.
|
|
BQardi
Bronze bruger
Medlem: 11.Nov.2016
Land: Danmark
Status: Offline
Point: 100
|
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 |
|
|