プログラムが大きいとエラー。64Kを超えるとダメとのこと。
8,000行くらい書いて実行したら上記のエラーが出ました。
Sub test()
Dim iYear As Integer, iMonth As Integer, iDay As Integer
Dim sMsg As String
iYear = 2023
iMonth = 2
iDay = 30
If iYear = 2022 And iMonth = 1 And iDay = 1 Then
sMsg = "2022年1月1日"
ElseIf iYear = 2022 And iMonth = 1 And iDay = 2 Then
sMsg = "2022年1月2日"
ElseIf iYear = 2022 And iMonth = 1 And iDay = 3 Then
sMsg = "2022年1月3日"
ElseIf iYear = 2022 And iMonth = 1 And iDay = 4 Then
sMsg = "2022年1月4日"
ElseIf iYear = 2022 And iMonth = 1 And iDay = 5 Then
sMsg = "2022年1月5日"
ElseIf iYear = 2022 And iMonth = 1 And iDay = 6 Then
sMsg = "2022年1月6日"
ElseIf iYear = 2022 And iMonth = 1 And iDay = 7 Then
sMsg = "2022年1月7日"
ElseIf iYear = 2022 And iMonth = 1 And iDay = 8 Then
sMsg = "2022年1月8日"
ElseIf iYear = 2032 And iMonth = 12 And iDay = 30 Then
sMsg = "2032年12月30日"
ElseIf iYear = 2032 And iMonth = 12 And iDay = 31 Then
sMsg = "2032年12月31日"
Else
sMsg = "日付が不正です"
End If
Debug.Print sMsg
End Sub
コンパイルエラーが起きなくなるまでIF文の分岐を下から削除。
このラインでエラーが出なくなり、約3,500行残った。削除せずにコメントアウトでもOK。
ダメなポイント
・3,500行も書いて日付範囲が5年弱。
・別プロシージャを追加すれば日付範囲が広げられる?
・プロシージャの64K制限をどうにかすれば・・・
・改修の作業量が尋常じゃない。
・違う。そうじゃない。
上記プログラムを出力したプログラムも載せときます。
Sub プログラムを出力するプログラム()
Dim iYear As Integer, iMonth As Integer, iDay As Integer
Dim sMsg As String
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets.Add
Dim iRow As Long: iRow = 1
For iYear = Year(Now()) To Year(Now()) + 10
For iMonth = 1 To 12
For iDay = 1 To 31
If Not IsDate(iYear & "/" & iMonth & "/" & iDay) Then Exit For
sh.Range("A" & iRow).Value = "elseif iYear = " & iYear & " and iMonth = " & iMonth & " and iDay = " & iDay & " then"
sh.Range("B" & iRow + 1).Value = "sMsg = """ & iYear & "年" & iMonth & "月" & iDay & "日"""
iRow = iRow + 2
Next
Next
Next
sh.Range("A" & iRow).Value = "end if"
sh.Range("A1").Value = Replace(sh.Range("A1").Value, "elseif", "if")
Set sh = Nothing
End Sub
以上。