
柴犬はイルミネーションの中にいます。
今回の概要
セルを選択します。

カレンダーが開きます。
空のセルですので初期値はこの日にちが黄色で表示されます。

クリックして22日を選択しました。
続けて22日をクリックします。

選択した日付がセルにセットされました。

22日をクリックする前に移り、25日のしたの小さい字の2(12月2日)をクリックしてみます。
直ちに12月のカレンダーが表示され2日が選択された表示になっています。
想定した動作となっています。

追加修正コード
OpenCalendar
インクリメントの列挙型の追加と、選択したシェイプの名前を登録する変数を追加しています。
    略
    Kanrei = 13
End Enum
'--------追加します。
Private Enum IncFlg
    IncForward = 0
    IncBackward = -1
End Enum
Private shpHeight           As Long
Private shpWidth            As Long
    略
Private StartPosi           As Long
Private DaysAndWeeks()      As Long
'--------追加します。
Private SelectShape         As String
アクション群
全面的に書き直しています。
'---------------------------------------
'
Private Sub NextYearClick()
    Call NextYear
End Sub
'---------------------------------------
'
Private Sub PreviousYearClick()
    Call PreviousYear
End Sub
'---------------------------------------
'
Private Sub NextMonthClick()
    Call NextMonth
End Sub
'---------------------------------------
'
Private Sub PreviousMonthClick()
    Call PreviousMonth
End Sub
'---------------------------------------
'
Public Sub NextYear()
    Call IncChageDraw(IntvYear, IncForward)
End Sub
'---------------------------------------
'
Public Sub PreviousYear()
    Call IncChageDraw(IntvYear, IncBackward)
End Sub
'---------------------------------------
'
Public Sub NextMonth()
    Call IncChageDraw(IntvMonth, IncForward)
End Sub
'---------------------------------------
'
Public Sub PreviousMonth()
    Call IncChageDraw(IntvMonth, IncBackward)
End Sub
'---------------------------------------
'
Private Sub GoHome()
    Call MoveToToday(UseCurYear:=True)
End Sub
'---------------------------------------
'
Private Sub GoPreHome()
    Call MoveToToday(UseCurYear:=False)
End Sub
IncChageDraw
インクリメントしたときの動作を書きます。
'---------------------------------------
'
Private Sub IncChageDraw(ByVal intvMove As String, _
                         ByVal DT As IncFlg)
    Dim IncDate             As Date
    Dim iInc                As Long
    Dim Grid                As Long
    '--------インクリメントの方向を決めます。
    If DT = IncForward Then
        iInc = 1
    Else
        iInc = -1
    End If
    '--------インクリメントした日付を求めます。
    IncDate = DateAdd(intvMove, iInc, CurDate)
    '--------表示年月日(CurDate/CurDay..)をセットします。
    Call StartValues(IncDate)
    '--------年と月を表示します。
    Call DrawYearMonth
    '--------日にちを描画します。
    '        DaysAndWeeks の更新が必要
    Call DaysDraw
    '--------黄色を戻します。
    With ActiveSheet.Shapes(SelectShape)
        .Fill.ForeColor.RGB = RGB(221, 221, 221)
    End With
    '--------日にち(CurDay)を黄色に塗ります。
    Call YellowPaint
End Sub
MoveToToday
HOME はオープン時の日にちに戻し、PreHOME 表示する年は変えず月と日をオープン時に戻します。
'---------------------------------------
'
Private Sub MoveToToday(UseCurYear As Boolean)
    '--------戻る日付を求めます。
    If UseCurYear Then
        CurYear = HoldYear
    End If
    CurMonth = HoldMonth
    CurDay = HoldDay
    CurDate = DateSerial(CurYear, CurMonth, CurDay)
    '--------年と月を表示します。
    Call DrawYearMonth
    '--------日にちを描画します。
    '        DaysAndWeeks の更新が必要
    Call DaysDraw
    '--------黄色を戻します。
    With ActiveSheet.Shapes(SelectShape)
        .Fill.ForeColor.RGB = RGB(221, 221, 221)
    End With
    '--------日にち(CurDay)を黄色に塗ります。
    Call YellwPaint
End Sub
DateClick
DateClick を書き直し、DateClickShape を追加します。
初回選択で選択したシェイプを黄色に塗り、続けて2回目のクリックで決定としアクティブセルに日付をセットします。
'---------------------------------------
'
Private Sub DateClick()
    Dim myCaller            As String
    '--------マクロを呼び出したオブジェクトの名前
    myCaller = Application.Caller
   
    '--------シェイプにテキストデータがない
    If Len(ActiveSheet.Shapes(myCaller).TextFrame2.TextRange.Text) = 0 Then
        Exit Sub
    End If
    '--------2回連続でクリックされた場合、決定しアクティブセルに日付をセットします。
    If (SelectShape = myCaller) Then
        ActiveCell.Value = CurDate
        Call DeleteCal
    '--------新しい選択のシェイプを描画します。
    Else
        Call DateClickShape(myCaller)
    End If
 
End Sub
'---------------------------------------
'
Private Sub DateClickShape(NewSelect As String)
    Dim Grid                As Long
    '--------シェイプの名前から Grid を求めます。
    Grid = Replace(NewSelect, "SHPD", "")
    '--------シェイプが属する月と表示する月が異なる場合
    If CurMonth <> DatePart(IntvMonth, DaysAndWeeks(Grid)) Then
        '--------表示年月日(CurDate/CurDay..)をセットします。
        Call StartValues(DaysAndWeeks(Grid))
        '--------年と月を表示します。
        Call DrawYearMonth
        '--------日にちを描画します。
        '        DaysAndWeeks の更新が必要
        Call DaysDraw
    Else
        '--------一部の更新します。
        CurDate = DaysAndWeeks(Grid)
        CurDay = DatePart(IntvDay, CurDate)
    End If
    '--------黄色を戻します。
    With ActiveSheet.Shapes(SelectShape)
        .Fill.ForeColor.RGB = RGB(221, 221, 221)
    End With
    '--------日にち(CurDay)を黄色に塗ります。
    Call YellowPaint
End Sub
OpenDraw
オープン時の初期日にちを黄色に塗ります。
'---------------------------------------
'
Private Sub OpenDraw()
    略
    '--------日にちを描画します。
    Call DaysDraw
    '--------日にち(CurDay)を黄色に塗ります。(追加)
    Call YellowPaint
End Sub
YellowPaint
新しく追加します。
選択された日にち(シェイプ)からシェイプの名前を求め黄色に塗ります。
'---------------------------------------
'
Private Sub YellowPaint()
    Dim Grid                As Long
    Dim SpName              As String
    '--------選択されたシェイプの名前を求めます。
    Grid = StartPosi + CurDay - 1
    SpName = "SHPD" & Format(Grid, "00")
    '--------選択シェイプに登録します。
    SelectShape = SpName
    With ActiveSheet.Shapes(SpName)
        '--------黄色にします。
        .Fill.ForeColor.RGB = RGB(255, 255, 0)
    End With
End Sub