VB6、およびOffice VBAの元号対応の状況について


概要

VB6、およびOffice VBAの元号対応の状況についてまとめました。

パッチによっては、CDate、DateValueは強制終了する、という状況となる。CDate, DateValueで和暦日付文字列変換を行う、という実装はあまりないと思うが。

また、元年表記についてもレジストリを参照して動作しない不具合があった。

ただし、Windows 10 1809以外は、2019年3月20日に対応パッチがリリースされている。

https://forest.watch.impress.co.jp/docs/news/1175704.html


元年表記

VBA.Formatの(Win32等もだが)元年表記は、以下のレジストリに左右される。

また、2019/3/20の更新を適用しないと、正しくレジストリを参照して動作しないようだ。((4/14修正)Windows 10 1809用の更新は3/20のタイミングではリリースされていないリリースされた)

https://forest.watch.impress.co.jp/docs/news/1175704.html

Gannen vs Ichinen

https://blogs.msdn.microsoft.com/shawnste/2018/11/12/gannen-vs-ichinen/

コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese

"InitialEraYear"="1年" or "元年"

既定値は、Microsoftの情報によれば、

https://support.microsoft.com/ja-jp/help/4469068/summary-of-new-japanese-era-updates-kb4469068

バージョン

2019/5にリリース予定のWindows 19H1
"元年"

Windows 10 1809以前、7等
"1年"


各関数が対応される更新


VBA, VB6


OSを更新することで元号対応(本記事の内容)


  • Format、CDate、DateValue、DateDiff、DateAdd、DatePart、IsDate


.NET 3.5


OSを更新することで元号対応(本記事の内容)


  • Microsoft.VisualBasic.Compatibility.VB6.Format


.NET 3.5を更新することで元号対応(補足情報)


  • System.DateTime.ToString(format As String, provider As IFormatProvider)

  • Microsoft.VisualBasic.DateAndTime.DateValue

  • Microsoft.VisualBasic.DateAndTime.DateDiff

  • Microsoft.VisualBasic.DateAndTime.DateAdd

  • Microsoft.VisualBasic.DateAndTime.DatePart

  • CDate

  • Microsoft.VisualBasic.Information.IsDate


履歴


2019年3月19日

Windows 7と特定のOfficeでは対応している、という話もあるので確認予定。

Windows 7では、Windows Updateで最新のパッチまで適用することで、CDate、DateValueについても改善しました。が、元年表記ではなくなった。


2019年3月21日

以下の2019年3月19日発表のパッチでもろもろ改善している可能性もあるので、確認予定

https://forest.watch.impress.co.jp/docs/news/1175704.html


2019年4月2日

元年表記に関する記載を追加。また、2019年3月19日発表のパッチで改善していることを確認。


2019年4月4日

各関数が対応される更新について追記


2019年4月14日

元年表記に関わる修正を追記。

Windows 10 1809の最新バージョンに関する検証を追加。


環境


環境1


  • Windows 10 1803 (OS ビルド 17134.590), 2019 年 2 月 13 日 — KB4487017

  • Visual Basic 6 ランタイム

  • Microsoft Excel for Office 365 MSO (16.0.11231.20164) 32ビット


環境1-1


  • Windows 10 1803 (OS ビルド 17134.677), 2019 年 3 月 20 日 — KB4489894

  • Visual Basic 6 ランタイム

  • Microsoft Excel for Office 365 MSO (16.0.11231.20164) 32ビット


環境2


  • Windows 10 1809 (OS ビルド 17763.379), 2019 年 3 月 13 日 — KB4489899

  • Visual Basic 6 ランタイム

  • Microsoft Excel for Office 365 MSO (16.0.11231.20164) 32ビット


環境2-1


環境3


結果


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Erasに追加

2019 05 01 新規_新_New_N


(4/14追記)更新適用直後の次のレジストリについて未確認。

ただし、Microsoftの情報によれば、2019/5にリリース予定のWindows 19H1以外、"1年"。

https://support.microsoft.com/ja-jp/help/4469068/summary-of-new-japanese-era-updates-kb4469068

Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese

Name: InitialEraYear


Format

Format(Date, "gggee年mm月dd日")

環境
Date型
結果
備考

環境1 Windows 10 1803 (OS ビルド 17134.590)
2019/04/30
平成31年04月30日


2019/05/01
新規元年05月01日
元年表記


2020/05/01
新規02年05月01日

環境1-1 Windows 10 1803 (OS ビルド 17134.677)
2019/04/30
平成31年04月30日


2019/05/01
新規01年05月01日
1年表記


2020/05/01
新規02年05月01日

環境2 Windows 10 1809 (OS ビルド 17763.379)
2019/04/30
平成31年04月30日


2019/05/01
新規元年05月01日
元年表記


2020/05/01
新規02年05月01日

環境2-1 Windows 10 1809 (OS ビルド 17763.437)
2019/04/30
平成31年04月30日


2019/05/01
新規01年05月01日
1年表記


2020/05/01
新規02年05月01日

環境3 Windows 7 SP1 KB4489878
2019/04/30
平成31年04月30日


2019/05/01
新規01年05月01日
1年表記


2020/05/01
新規02年05月01日


CDate

CDate(日付文字列)

環境
日付文字列
結果
備考

環境1 Windows 10 1803 (OS ビルド 17134.590)
平成31年04月30日
2019/04/30


新規元年05月01日
実行時エラー '13' 型が一致しません。
パースで新元号が認識されない


新規02年05月01日
実行時エラー '13' 型が一致しません。
パースで新元号が認識されない


平成31年05月01日
2019/05/01

環境1-1 Windows 10 1803 (OS ビルド 17134.677)
平成31年04月30日
2019/04/30


新規元年05月01日
2019/05/01


新規02年05月01日
2019/05/01


平成31年05月01日
2019/05/01

環境2 Windows 10 1809 (OS ビルド 17763.379)
平成31年04月30日
2019/04/30


新規元年05月01日
実行時エラー '13' 型が一致しません。
パースで新元号が認識されない


新規02年05月01日
実行時エラー '13' 型が一致しません。
パースで新元号が認識されない


平成31年05月01日
2019/05/01

環境2-1 Windows 10 1809 (OS ビルド 17763.437)
平成31年04月30日
2019/04/30


新規元年05月01日
2019/05/01


新規02年05月01日
2019/05/01


平成31年05月01日
2019/05/01

環境3 Windows 7 SP1 KB4489878
平成31年04月30日
2019/04/30


新規元年05月01日
2019/05/01


新規02年05月01日
2019/05/01


平成31年05月01日
2019/05/01


DateValue

DateValue(日付文字列)

環境
日付文字列
結果
備考

環境1 Windows 10 1803 (OS ビルド 17134.590)
平成31年04月30日
2019/04/30


新規元年05月01日
実行時エラー '13' 型が一致しません。
パースで新元号が認識されない


新規02年05月01日
実行時エラー '13' 型が一致しません。
パースで新元号が認識されない


平成31年05月01日
2019/05/01

環境1-1 Windows 10 1803 (OS ビルド 17134.677)
平成31年04月30日
2019/04/30


新規元年05月01日
2019/05/01


新規02年05月01日
2019/05/01


平成31年05月01日
2019/05/01

環境2 Windows 10 1809 (OS ビルド 17763.379)
平成31年04月30日
2019/04/30


新規元年05月01日
実行時エラー '13' 型が一致しません。
パースで新元号が認識されない


新規02年05月01日
実行時エラー '13' 型が一致しません。
パースで新元号が認識されない


平成31年05月01日
2019/05/01

環境2-1 Windows 10 1809 (OS ビルド 17763.437)
平成31年04月30日
2019/04/30


新規元年05月01日
2019/05/01


新規02年05月01日
2019/05/01


平成31年05月01日
2019/05/01

環境3 Windows 7 SP1 KB4489878
平成31年04月30日
2019/04/30


新規元年05月01日
2019/05/01


新規02年05月01日
2019/05/01


平成31年05月01日
2019/05/01


サンプルソース


Form1.frm

Option Explicit

Private Sub Command1_Click()
Text3.Text = Format(CDate(Text1.Text), Text2.Text)
End Sub

Private Sub Command2_Click()
Text1.Text = CStr(CDate(Text3.Text))
End Sub

Private Sub Command3_Click()
Text1.Text = CStr(DateValue(Text3.Text))
End Sub



ファイル配置

Project1.exe

Project1.exe.local\VB6JP.DLL


イメージ

image.png