去年的作业,写的挺冗长。im表示大行数;n表示每月固定天数;d表示天数;p表示星期几;k表示小行数

Private Sub Command1_Click()
    Dim yyyy As Integer
    Dim p As Integer
    Dim s As String
    Dim im As Integer
    Dim j As Integer
   Dim i As Integer
    Dim k As Integer
    Dim n1 As Integer
    Dim n2 As Integer
    Dim n3 As Integer
    Dim d1 As Integer
    Dim d2 As Integer
    Dim d3 As Integer
    Dim p0 As Integer
    Dim p1 As Integer
    Dim p2 As Integer
    Dim k0 As Integer
    Dim k1 As Integer
    Dim k2 As Integer
    Dim k3 As Integer
    yyyy = InputBox("请输入年份", "年份输入", "2021")
    p = InputBox("请输入元旦星期几", "星期输入", "6")
    s = "日一二三四五六"
    For im = 1 To 4
        For j = 1 To 3
            Print Tab(35 * j); im * 3 - 3 + j; "月";
        Next j
        Print
        Print
        For j = 1 To 3
            For i = 0 To 6
                Print Tab(30 * j + i * 4); Mid(s, i + 1, 1);
            Next i
        Next j
        
        Select Case im * 3
            Case 3, 12
                n3 = 31
            Case 6, 9
                n3 = 30
        End Select
        Select Case im * 3 - 1
            Case 5, 8
                n2 = 31
            Case 11
                n2 = 30
            Case 2
                If yyyy Mod 4 = 0 And yyyy Mod 100 <> 0 Or yyyy Mod 400 = 0 Then
                      n2 = 29
                   Else
                     n2 = 28
                End If
        End Select
        Select Case im * 3 - 2
            Case 1, 7, 10
                n1 = 31
            Case 4
                n1 = 30
        End Select
        p1 = (n1 + p) Mod 7
        p2 = (n2 + p1) Mod 7
        p0 = p2
        d1 = 1
        d2 = 1
        d3 = 1
        
        For k0 = 1 To 6
            For k1 = p To 6
                If d1 <= n1 Then
                        Print Tab(30 + k1 * 4); d1;
                        d1 = d1 + 1
                        p = p + 1
                End If
            Next k1
            If p > 6 Then p = 0
            
            For k2 = p1 To 6
                If d2 <= n2 Then
                        Print Tab(60 + k2 * 4); d2;
                        d2 = d2 + 1
                        p1 = p1 + 1
                End If
            Next k2
            If p1 > 6 Then p1 = 0
            
            For k3 = p2 To 6
                If d3 <= n3 Then
                        Print Tab(90 + k3 * 4); d3;
                        d3 = d3 + 1
                        p2 = p2 + 1
                End If
            Next k3
            If p2 > 6 Then p2 = 0
            Print
        Next k0
        p = (n3 + p0) Mod 7
        Print
        Print
    Next im
End Sub

最终效果

vb.net日历控件 vb编程制作简单日历_Click