Office Guru

Fontos különbség két, elsőre hasonlónak tűnő kódsor között

2017. február 05. - Office Guru

A mai posztom nem lesz túlságosan hosszú és az is lehet, hogy ezeréves tapasztalattal bíró VBA-mágusok számára nem is bír semmilyen komoly értékkel, de ettől függetlenül megosztanám mindenkivel a kérdést és a választ is, hátha még jól jön majd valakinek.

A kérdés az, hogy a következő két utasítás közül az elsőnek miért 01, a másodiknak pedig miért 02 az eredménye? Ránézésre jónak tűnhet az első is, de mégis miért van akkor különbség?

Utasítás:
ActiveWorkbook.Sheets.Add(before:=Worksheets(Worksheets.Count)).Name = Format(Month(Now), "mm")
Eredmény:
01

formatnow.jpg

Utasítás:
ActiveWorkbook.Sheets.Add(before:=Worksheets(Worksheets.Count)).Name = Format(Now(), "mm")
Eredmény:
02

formatnow2.jpg

formatnow3.jpgAz alapvetően tisztán látható, hogy a második utasításban az adott pillanatban lévő dátumot (Now) Format segítségével úgy alakítjuk át, hogy kizárólag a hónap jelenjen meg belőle.

Az elsőben a problémát az okozza, hogy az Excel számként tárolja a dátumokat (ahogy azt már többször is megnéztük itt a blogon), azaz Month(Now) kettőt fog ugyan visszaadni (ez tisztán látható is, ha ellenőrizzük), viszont innentől kezdve a program a kettőt már nem hónapszámként fogja értelmezni, hanem logikája szerint kettes számként.

És mint ismert, 1900. január elseje az egyes számnak felel meg Excelben, így értelemszerűen a fentiek alapján a kettes szám nem a második hónapot fogja jelenteni, hanem 1900. január másodikát, innentől kezdve pedig már érthető, hogy 1900. január másodikában a hónap az január és nem február.

A bejegyzés trackback címe:

https://officeguru.blog.hu/api/trackback/id/tr1512183664

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

2017.02.07. 19:49:28

kiegészítésként:
a format (szám, "mm") mm-je miatt fogja ismét dátummá alakítani, ezért fogja majd egy rossz dátumból kinyerni a hónapértéket

így jó lesz az első is, mert ezzel csak formázza a 2-est kettő karakterre:
ActiveWorkbook.Sheets.Add(before:=Worksheets(Worksheets.Count)).Name = Format(Month(Now),"00")
süti beállítások módosítása