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

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

Az 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.