Avatar billede folj Forsker
02. januar 2018 - 12:35 Der er 7 kommentarer og
1 løsning

VBA - Årstal der hører til ugenummer.

[/div]Sub AddNewWeek()
' procedure der indsætter en ny uger dynamisk, så der hele tiden er oprettet uge-sheets et år frem
  Dim LastExcistingDate As Date
  Dim NewSheetName As String
  Dim BackToSheet As String

  LastExcistingDate = Range("LastDateLastWeekSheet") ' indhenter op lysning om sidste dato i den sidst oprettede uge (fra navngivet celle)
 
If LastExcistingDate - 365 < Date Then  ' hvis planen  ikke rækker x antal dage frem, skal der oprettes et nyt uge-sheet (kopi af arket Template")

  ' kopierer herunder det sheet der hedder Template, og det vil så af excel blive navngivet "Template (2)"
  Sheets("Template").Copy Before:=Sheets("Template")

  Sheets("Template (2)").Select ' går ind og retter nogle data i det nyligt kopierede ark
  Range("B10").Value = LastExcistingDate + 1 ' retter uge-arkets startdato til  LastExcistingDate + 1 [/div]

Her kommer problemet så:

Den sidste dato 'LastExcistingDate ' indeholder datoen 30-12-2018, som er en søndag.
Den næste uge der skal sættes ind vil så hedde uge 1 2019 (selvom startdato er mandag 31-12-2018) , men min kode herunder beregner at den skal hedde uge 1 2018 fordi den tager årstal fra mandag 31-12-2018, og SheetName 'uge 1 2018' eksisterer i forvejen, og så melder Excel fejl, fordi jeg prøver at navngive til et sheet der allerede findes.

Bemærk at function UgeNr er af egen konstruktion, og den returnerer det rigtige ugenummer der hører til inputdatoen.

Hvordan kan jeg forbedre min linje herunder så den registrerer det tilhørende årstal korrekt - vel at mærke uanset årstal og uanset om der er en uge 53 i spil, det pågældende årstal.
  NewSheetName = "U " & UgeNr(LastExcistingDate + 1) & " " & Year(LastExcistingDate + 1)


Der kommer meget mere kode herunder, så i behøves ikke at reagere på at der er startet en if-sætning , men der er ikke nogen End If.

Alle svar og spørgsmål er velkomne.
Gætterier og måske'er har jeg selv.
Avatar billede folj Forsker
02. januar 2018 - 12:40 #1
Beklager at der gik lidt kuk I tekstbokse der skulle gøre kodelinierne mere læsevenlige.
Avatar billede anedi Ekspert
02. januar 2018 - 13:57 #2
Hej og godt nytår.

Det må handle om hvorvidt dagen efter last existing date skifter ugenr og i så fald om det falder (bliver til uge 1 og dermed næste år) eller er uændret/stiger (forbliver samme år).

Jeg tror derfor du kan udskifte årsangivelsen 'Year(LastExcistingDate + 1)' med noget i stil med:
IF(UgeNr(LastExcistingDate + 1)<UgeNr(LastExcistingDate);YEAR(LastExcistingDate + 1);Year(LastExcistingDate))

Dermed vil du beholde året for din sidste indtastede dato hvis vi går fra uge 52 til uge 53 i indeværende år og få næste år, hvis ugen skifter fra 52/53 til uge 1 i indeværende år.

Vh
Anedi
Avatar billede anedi Ekspert
02. januar 2018 - 13:58 #3
Mindre fejl, men ellers virker den vist:
IF(UgeNr(LastExcistingDate + 1)<UgeNr(LastExcistingDate);YEAR(LastExcistingDate) + 1;Year(LastExcistingDate))

Vh
Anedi
Avatar billede Sitestory Mester
02. januar 2018 - 15:55 #4
Jeg er ikke sikker på, at jeg forstår spørgsmålet korrekt, men du kan vel lave et tjek på, om ugenummeret i indeværende år er mindre end det sidste i indeværende år. Hvis det er det, må det nødvendigvis høre til året efter. Du kan bruge den indbyggede "DatePart" funktion i VBA (du behøver ikke lave din egen funktion). Fx returnerer følgende ugenummeret fra en fuld dato:

DatePart("ww", "fulde dato fx 31/12/2018", vbUseSystemDayOfWeek, vbUseSystem)
Avatar billede folj Forsker
02. januar 2018 - 16:36 #5
@anedi og @Sitestory:

Begge input er gode. Jeg vil eksperimentere lidt videre når jeg igen er på job på torsdag.
Foreløbig tak.
Avatar billede Jan Hansen Ekspert
03. januar 2018 - 10:41 #6
Noget med
if month(LastExcistingDate+1) =12 and Ugenr(LastExcistingDate+1)=1 then
NewSheetName = "U " & UgeNr(LastExcistingDate + 1) & " " & Year(LastExcistingDate + 1)+1
else
NewSheetName = "U " & UgeNr(LastExcistingDate + 1) & " " & Year(LastExcistingDate + 1)
end if

Jan
Avatar billede folj Forsker
04. januar 2018 - 12:51 #7
@Jan Hansen

Selvom de to tidligere input også var brugbare, så løb du med prisen for bedste løsning. Og din løsning var lige til at kopiere ind I min VBA-proceure.

Takker for indsatsen.
Avatar billede Jan Hansen Ekspert
04. januar 2018 - 13:34 #8
velbekomme
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester