分享
 
 
 

利用 wordXP 实现自动排班

王朝other·作者佚名  2006-05-08
窄屏简体版  字體: |||超大  

许多工作岗位需要每天或每月排一次班,如何用WORD实现自动排班?笔者曾对此做过一些研究,不尽人意.

在一位网友(chewinggum(口香糖·把减肥列入下一个五年计划) )提供了很不错的代码(http://community.csdn.net/Expert/topic/4304/4304006.xml?temp=.7863428),稍做了一些改动,感觉效果还可以.

新建WORD文档,ALT+F11进入IDE界面.添加模块1并进行如下操作:

Thisdocument加入下面代码

Private Sub Document_Open()

Main

End Sub

模块1加入下面代码:

Option Explicit

Dim LunarInfo(0 To 149) As Long

Dim SolarMonth

Dim Gan

Dim Zhi

Dim Animals

Dim SolarTerm

Dim sTermInfo

Dim nStr1

Dim nStr2

Dim nStr3

Dim MonthName

Dim sFtv

Dim lFtv

Dim wFtv

Sub Main()

Application.ScreenUpdating = False

Selection.WholeStory

Selection.Delete Unit:=wdCharacter, Count:=1

Dim member As String

Dim m() As String

Dim InputYear As Integer '输入年

Dim InputMonth As Integer '输入年

Dim intTableRows As Integer '表格的列数

Dim intMonthDays As Integer '该月的天数

Dim intWeekDay As Integer '星期几

Dim intFirstDayWeek As Integer '第一天是星期几

Dim i As Integer

Initialize '初始化数据

member = InputBox("输入年月如" & Format(Date, "yyyy-mm"), "提示", Format(Date, "yyyy-mm"))

InputMonth = CInt(Right(member, 2))

InputYear = CInt(Left(member, 4))

member = InputBox("请输入值班者名单", "提示", "赵一伤,钱二败,孙三毁,李四摧,周五输,吴六破,郑七灭,王八衰,鹤笔翁,鹿仗客")

m = Split(member, ",")

For i = 0 To UBound(m)

m(i) = i + 1 & " " & m(i)

Next

member = InputBox(Join(m, vbCrLf), "请选择上月最后一位值班者编号", "1")

'计算表格的列数

intMonthDays = SolarDays(InputYear, InputMonth)

intFirstDayWeek = Weekday(InputYear & "-" & InputMonth & "-1")

intTableRows = (intMonthDays + intFirstDayWeek - 1)

If intTableRows / 7 <> Int(intTableRows / 7) Then

intTableRows = Int(intTableRows / 7) + 1

Else

intTableRows = intTableRows / 7

End If

ActiveDocument.PageSetup.PaperSize = wdPaperA4

ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=intTableRows * 2 + 2, NumColumns:= _

7, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _

wdAutoFitWindow

Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter

Selection.Tables(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter

Selection.Tables(1).LeftPadding = CentimetersToPoints(0.05)

Selection.Tables(1).RightPadding = CentimetersToPoints(0.05)

Selection.Tables(1).Spacing = 0

'生成表头

Selection.Tables(1).Cell(1, 1).Select

Selection.SelectRow

Selection.Cells.Merge

Selection.Cells.Shading.BackgroundPatternColor = wdColorIndigo

Selection.Font.Size = 15

Selection.Font.Color = wdColorWhite

Selection.TypeText "公元" & InputYear & "年" & InputMonth & "月 "

Selection.Font.Color = wdColorYellow

Selection.TypeText "农历 " & cyclical(InputYear) & Animal(InputYear) & "年"

For i = 1 To 7

If i = 1 Or i = 7 Then

Selection.Tables(1).Cell(2, i).Range.Font.Color = wdColorRed

Else

Selection.Tables(1).Cell(2, i).Range.Font.Color = wdColorBlack

End If

Selection.Tables(1).Cell(2, i).Range.Font.Size = 15

Selection.Tables(1).Cell(2, i).Range.Font.Bold = True

Selection.Tables(1).Cell(2, i).Range.Text = " 星期" & nStr1(i - 1)

Selection.Tables(1).Cell(2, i).Shading.BackgroundPatternColor = wdColorYellow

Next

'生成日历

For i = 1 To intMonthDays

Dim intRow As Integer

Dim strDate As String

intWeekDay = Weekday(InputYear & "-" & InputMonth & "-" & i)

intRow = ((intFirstDayWeek + i - 2) \ 7 + 1) * 2 + 1 '计算行位置

Dim strTmp As String

Dim lngColor As Long

strTmp = Trim(GetDayString(CDate((InputYear & "-" & InputMonth & "-" & i)), lngColor))

Selection.Tables(1).Cell(intRow, intWeekDay).Select

If intWeekDay = 1 Or intWeekDay = 7 Then

Selection.Font.Color = wdColorRed

ElseIf Left(strTmp, 1) = "*" Then

Selection.Font.Color = wdColorRed

strTmp = Replace(strTmp, "*", "")

Else

Selection.Font.Color = wdColorBlack

End If

Selection.Font.Size = 40

Selection.Font.Name = "Arial narrow"

Selection.Font.Bold = True

Selection.TypeText i

Selection.TypeText Chr(11)

If Len(strTmp) > 5 Then

Selection.Font.Size = 8

Else

Selection.Font.Size = 10

End If

Selection.Font.Name = "宋体"

Selection.Font.Color = lngColor

Selection.TypeText strTmp

Next

'

' '以下部分是为了美化输出,如搂住不需要可以将以下部分完全注释掉

' With Selection.Tables(1)

' .Borders(wdBorderLeft).LineStyle = wdLineStyleNone

' .Borders(wdBorderRight).LineStyle = wdLineStyleNone

' .Borders(wdBorderTop).LineStyle = wdLineStyleNone

' .Borders(wdBorderBottom).LineStyle = wdLineStyleNone

' .Borders(wdBorderHorizontal).LineStyle = wdLineStyleNone

' .Borders(wdBorderVertical).LineStyle = wdLineStyleNone

' .Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone

' .Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone

' .Borders.Shadow = False

' End With

For i = 1 To intMonthDays

intWeekDay = Weekday(InputYear & "-" & InputMonth & "-" & i)

intRow = ((intFirstDayWeek + i - 2) \ 7 + 1) * 2 + 2 '计算行位置

Selection.Tables(1).Cell(intRow, intWeekDay).Select

Selection.Font.Size = 16

Selection.TypeText Mid(m((CInt(member) + i - 1) Mod 9), 2)

Next

Application.ScreenUpdating = True

End Sub

'数据初始化

Private Sub Initialize()

Dim strTmp As String

LunarInfo(0) = &H4BD8

LunarInfo(1) = &H4AE0

LunarInfo(2) = &HA570

LunarInfo(3) = &H54D5

LunarInfo(4) = &HD260

LunarInfo(5) = &HD950

LunarInfo(6) = &H16554

LunarInfo(7) = &H56A0

LunarInfo(8) = &H9AD0

LunarInfo(9) = &H55D2

LunarInfo(10) = &H4AE0

LunarInfo(11) = &HA5B6

LunarInfo(12) = &HA4D0

LunarInfo(13) = &HD250

LunarInfo(14) = &H1D255

LunarInfo(15) = &HB540

LunarInfo(16) = &HD6A0

LunarInfo(17) = &HADA2

LunarInfo(18) = &H95B0

LunarInfo(19) = &H14977

LunarInfo(20) = &H4970

LunarInfo(21) = &HA4B0

LunarInfo(22) = &HB4B5

LunarInfo(23) = &H6A50

LunarInfo(24) = &H6D40

LunarInfo(25) = &H1AB54

LunarInfo(26) = &H2B60

LunarInfo(27) = &H9570

LunarInfo(28) = &H52F2

LunarInfo(29) = &H4970

LunarInfo(30) = &H6566

LunarInfo(31) = &HD4A0

LunarInfo(32) = &HEA50

LunarInfo(33) = &H6E95

LunarInfo(34) = &H5AD0

LunarInfo(35) = &H2B60

LunarInfo(36) = &H186E3

LunarInfo(37) = &H92E0

LunarInfo(38) = &H1C8D7

LunarInfo(39) = &HC950

LunarInfo(40) = &HD4A0

LunarInfo(41) = &H1D8A6

LunarInfo(42) = &HB550

LunarInfo(43) = &H56A0

LunarInfo(44) = &H1A5B4

LunarInfo(45) = &H25D0

LunarInfo(46) = &H92D0

LunarInfo(47) = &HD2B2

LunarInfo(48) = &HA950

LunarInfo(49) = &HB557

LunarInfo(50) = &H6CA0

LunarInfo(51) = &HB550

LunarInfo(52) = &H15355

LunarInfo(53) = &H4DA0

LunarInfo(54) = &HA5D0

LunarInfo(55) = &H14573

LunarInfo(56) = &H52D0

LunarInfo(57) = &HA9A8

LunarInfo(58) = &HE950

LunarInfo(59) = &H6AA0

LunarInfo(60) = &HAEA6

LunarInfo(61) = &HAB50

LunarInfo(62) = &H4B60

LunarInfo(63) = &HAAE4

LunarInfo(64) = &HA570

LunarInfo(65) = &H5260

LunarInfo(66) = &HF263

LunarInfo(67) = &HD950

LunarInfo(68) = &H5B57

LunarInfo(69) = &H56A0

LunarInfo(70) = &H96D0

LunarInfo(71) = &H4DD5

LunarInfo(72) = &H4AD0

LunarInfo(73) = &HA4D0

LunarInfo(74) = &HD4D4

LunarInfo(75) = &HD250

LunarInfo(76) = &HD558

LunarInfo(77) = &HB540

LunarInfo(78) = &HB5A0

LunarInfo(79) = &H195A6

LunarInfo(80) = &H95B0

LunarInfo(81) = &H49B0

LunarInfo(82) = &HA974

LunarInfo(83) = &HA4B0

LunarInfo(84) = &HB27A

LunarInfo(85) = &H6A50

LunarInfo(86) = &H6D40

LunarInfo(87) = &HAF46

LunarInfo(88) = &HAB60

LunarInfo(89) = &H9570

LunarInfo(90) = &H4AF5

LunarInfo(91) = &H4970

LunarInfo(92) = &H64B0

LunarInfo(93) = &H74A3

LunarInfo(94) = &HEA50

LunarInfo(95) = &H6B58

LunarInfo(96) = &H55C0

LunarInfo(97) = &HAB60

LunarInfo(98) = &H96D5

LunarInfo(99) = &H92E0

LunarInfo(100) = &HC960

LunarInfo(101) = &HD954

LunarInfo(102) = &HD4A0

LunarInfo(103) = &HDA50

LunarInfo(104) = &H7552

LunarInfo(105) = &H56A0

LunarInfo(106) = &HABB7

LunarInfo(107) = &H25D0

LunarInfo(108) = &H92D0

LunarInfo(109) = &HCAB5

LunarInfo(110) = &HA950

LunarInfo(111) = &HB4A0

LunarInfo(112) = &HBAA4

LunarInfo(113) = &HAD50

LunarInfo(114) = &H55D9

LunarInfo(115) = &H4BA0

LunarInfo(116) = &HA5B0

LunarInfo(117) = &H15176

LunarInfo(118) = &H52B0

LunarInfo(119) = &HA930

LunarInfo(120) = &H7954

LunarInfo(121) = &H6AA0

LunarInfo(122) = &HAD50

LunarInfo(123) = &H5B52

LunarInfo(124) = &H4B60

LunarInfo(125) = &HA6E6

LunarInfo(126) = &HA4E0

LunarInfo(127) = &HD260

LunarInfo(128) = &HEA65

LunarInfo(129) = &HD530

LunarInfo(130) = &H5AA0

LunarInfo(131) = &H76A3

LunarInfo(132) = &H96D0

LunarInfo(133) = &H4BD7

LunarInfo(134) = &H4AD0

LunarInfo(135) = &HA4D0

LunarInfo(136) = &H1D0B6

LunarInfo(137) = &HD250

LunarInfo(138) = &HD520

LunarInfo(139) = &HDD45

LunarInfo(140) = &HB5A0

LunarInfo(141) = &H56D0

LunarInfo(142) = &H55B2

LunarInfo(143) = &H49B0

LunarInfo(144) = &HA577

LunarInfo(145) = &HA4B0

LunarInfo(146) = &HAA50

LunarInfo(147) = &H1B255

LunarInfo(148) = &H6D20

LunarInfo(149) = &HADA0

SolarMonth = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

Gan = Array("甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸")

Zhi = Array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥")

Animals = Array("鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪")

SolarTerm = Array("小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至")

sTermInfo = Array(0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758)

nStr1 = Array("日", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二")

nStr2 = Array("初", "十", "廿", "卅", "")

MonthName = Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC")

'国历节日 *表示放假日

strTmp = ""

strTmp = strTmp + "0101*元旦,"

strTmp = strTmp + "0214 情人节,"

strTmp = strTmp + "0305 学雷锋纪念日,"

strTmp = strTmp + "0308 妇女节,"

strTmp = strTmp + "0312 植树节,"

strTmp = strTmp + "0315 消费者权益日,"

strTmp = strTmp + "0401 愚人节,"

strTmp = strTmp + "0407 世界卫生日,"

strTmp = strTmp + "0422 世界地球日,"

strTmp = strTmp + "0501*劳动节,"

strTmp = strTmp + "0502*劳动节,"

strTmp = strTmp + "0503*劳动节,"

strTmp = strTmp + "0504 青年节,"

strTmp = strTmp + "0508 世界红十字日,"

strTmp = strTmp + "0512 国际护士节,"

strTmp = strTmp + "0515 国际家庭日,"

strTmp = strTmp + "0517 国际电信日,"

strTmp = strTmp + "0601 国际儿童节,"

strTmp = strTmp + "0605 世界环境保护日,"

strTmp = strTmp + "0606 全国爱眼日,"

strTmp = strTmp + "0609 口香糖的结婚纪念日,"

strTmp = strTmp + "0625 全国土地日,"

strTmp = strTmp + "0626 国际禁毒日,"

strTmp = strTmp + "0701 香港回归纪念日 中共诞辰,"

strTmp = strTmp + "0707 抗日战争纪念日,"

strTmp = strTmp + "0801 建军节,"

strTmp = strTmp + "0815 抗日战争胜利纪念,"

strTmp = strTmp + "0909 毛泽东逝世纪念,"

strTmp = strTmp + "0908 国际扫盲日,"

strTmp = strTmp + "0910 中国教师节,"

strTmp = strTmp + "0927 世界旅游日,"

strTmp = strTmp + "0928 孔子诞辰,"

strTmp = strTmp + "1001*国庆节,"

strTmp = strTmp + "1002*国庆节,"

strTmp = strTmp + "1003*国庆节,"

strTmp = strTmp + "1006 老人节,"

strTmp = strTmp + "1009 世界邮政日,"

strTmp = strTmp + "1014 世界标准日,"

strTmp = strTmp + "1016 世界粮食日,"

strTmp = strTmp + "1024 联合国日,"

strTmp = strTmp + "1120*彝族年,"

strTmp = strTmp + "1121*彝族年,"

strTmp = strTmp + "1122*彝族年,"

strTmp = strTmp + "1112 孙中山诞辰纪念,"

strTmp = strTmp + "1205 国际志愿人员日,"

strTmp = strTmp + "1220 澳门回归纪念,"

strTmp = strTmp + "1225 圣诞节"

strTmp = strTmp + "1226 毛泽东诞辰纪念"

sFtv = Split(strTmp, ",")

'农历节日 *表示放假日

strTmp = ""

strTmp = strTmp + "0101*春节,"

strTmp = strTmp + "0102*春节,"

strTmp = strTmp + "0103*春节,"

strTmp = strTmp + "0115 元宵节,"

strTmp = strTmp + "0505 端午节,"

strTmp = strTmp + "0624*火把节,"

strTmp = strTmp + "0625*火把节,"

strTmp = strTmp + "0626*火把节,"

strTmp = strTmp + "0707 七夕情人节,"

strTmp = strTmp + "0715 中元节,"

strTmp = strTmp + "0815 中秋节,"

strTmp = strTmp + "0909 重阳节,"

strTmp = strTmp + "1208 腊八节,"

strTmp = strTmp + "1224 小年,"

strTmp = strTmp + "0100 除夕"

lFtv = Split(strTmp, ",")

'某月的第几个星期几

strTmp = ""

strTmp = strTmp + "0520 母亲节,"

strTmp = strTmp + "0630 父亲节,"

strTmp = strTmp + "0730 被奴役国家周,"

strTmp = strTmp + "1144 感恩节"

wFtv = Split(strTmp, ",")

End Sub

'传回农历 y年的总天数

Private Function lYearDays(ByVal Y As Integer) As Integer

Dim i, Sum As Double

Sum = 0

For i = 1 To 12

Sum = Sum + lMonthDays(Y, i)

Next i

lYearDays = Sum + LeapDays(Y)

End Function

'传回农历 y年闰月的天数

Private Function LeapDays(ByVal Y As Integer) As Integer

Dim m As Integer

Dim l As Double

m = LeapMonth(Y)

If m = 0 Then

LeapDays = 0

Else

l = LunarInfo(Y - 1900)

'l = LunarInfo(Y - 1900 + 1)

If l < 0 Then l = l * (-1)

l = (l And &H10000)

If l = 0 Then

LeapDays = 29

Else

LeapDays = 30

End If

End If

End Function

'传回农历 y年闰哪个月 1-12 , 没闰传回 0 OK

Private Function LeapMonth(ByVal Y As Integer) As Integer

LeapMonth = 0

If Y >= 1900 Then LeapMonth = (LunarInfo(Y - 1900) And &HF)

End Function

'传回农历 y年m月的总天数 OK-

Private Function lMonthDays(ByVal Y As Integer, ByVal m As Integer) As Integer

If Y < 1900 Then Y = 1900

If (LunarInfo(Y - 1900) And Int(&H10000 / (2 ^ m))) = 0 Then

'If (LunarInfo(Y - 1900 + 1) And Int(&H10000 / (2 ^ m))) = 0 Then

lMonthDays = 29

Else

lMonthDays = 30

End If

End Function

'根据给定的阳历,返回农历的日期

Private Function GetLunar(ByVal SolarDate As Date) As String

Dim DaysOffset As Long

Dim i As Integer

Dim Temp As Long

Dim lyear, lmonth, lday As Integer

DaysOffset = SolarDate - CDate("1900-1-31")

i = 1900

Do While i < 2050 And DaysOffset >= 0

Temp = lYearDays(i)

DaysOffset = DaysOffset - Temp

i = i + 1

Loop

If DaysOffset < 0 Then

DaysOffset = DaysOffset + Temp

i = i - 1

End If

lyear = i

Dim Leap As Integer

Dim IsLeap As Boolean

Leap = LeapMonth(i)

IsLeap = False

i = 1

Do While i < 13 And DaysOffset > 0

If Leap > 0 And i = (Leap + 1) And IsLeap = False Then

i = i - 1

IsLeap = True

Temp = LeapDays(lyear)

Else

Temp = lMonthDays(lyear, i)

End If

If IsLeap And i = (Leap + 1) Then IsLeap = False

DaysOffset = DaysOffset - Temp

i = i + 1

Loop

If DaysOffset = 0 And Leap > 0 And i = Leap + 1 Then

If IsLeap Then

IsLeap = False

Else

IsLeap = True

i = i - 1

End If

End If

If DaysOffset < 0 Then

DaysOffset = DaysOffset + Temp

i = i - 1

End If

lmonth = i

lday = DaysOffset + 1

'返回特殊标志的字符串

If IsLeap Then

'GetLunar = "0000【" & Animal(lyear) & "】" & cyclical(lyear) & "年闰" & Format(lmonth, "00") & "月" & Format(lday, "00") & "日" & GetTerm(SolarDate)

GetLunar = "1" & lyear & Format(lmonth, "00") & Format(lday, "00")

Else

GetLunar = "0" & lyear & Format(lmonth, "00") & Format(lday, "00")

'GetLunar = Format(lmonth, "00") & Format(lday, "00") & "【" & Animal(lyear) & "】" & cyclical(lyear) & "年" & Format(lmonth, "00") & "月" & Format(lday, "00") & "日 " & GetTerm(SolarDate)

End If

End Function

'传回阳历 y年某m月的天数 OK

Private Function SolarDays(ByVal Y As Integer, ByVal m As Integer) As Integer

If m = 2 Then

If (Y Mod 4 = 0 And Y Mod 100 <> 0) Or (Y Mod 400 = 0) Then

SolarDays = 29

Else

SolarDays = 28

End If

Else

SolarDays = SolarMonth(m - 1)

End If

End Function

'某y年的第n个节气的日期(从0小寒起算) OK

Private Function sTerm(ByVal Y, n As Integer) As Date

Dim D1, D2 As Double

D1 = (31556925.9747 * (Y - 1900) + sTermInfo(n) * 60#)

D2 = DateDiff("s", "1970-1-1 0:0", "1900-1-6 2:5") + D1

D1 = D2 / 2

sTerm = DateAdd("s", D2 - D1, DateAdd("s", D1, "1970-1-1 0:0"))

sTerm = Format(sTerm, "yyyy/mm/dd")

End Function

'根据年份返回属象 OK

Private Function Animal(ByVal sYear As Integer) As String

Animal = Animals((sYear - 1900) Mod 12)

End Function

'根据阳历返回其节气,若不是则返回空 OK

Private Function GetTerm(ByVal sDate As Date) As String

Dim Y, m As Integer

Y = Year(sDate)

m = Month(sDate)

GetTerm = ""

If sTerm(Y, m * 2 - 1) = sDate Then

GetTerm = SolarTerm(m * 2 - 1)

ElseIf sTerm(Y, m * 2 - 2) = sDate Then

GetTerm = SolarTerm(m * 2 - 2)

End If

End Function

'根据阳历返回其节日,若不是则返回空 OK

Private Function GetFeast(ByVal sDate As Date) As String

Dim i As Integer

Dim strTmp As String

strTmp = Format(sDate, "MMDD")

For i = LBound(sFtv) To UBound(sFtv)

If Left(sFtv(i), 4) = strTmp Then

GetFeast = Mid(sFtv(i), 5, Len(sFtv(i)) - 4)

Exit Function

End If

Next

GetFeast = ""

End Function

'根据阴历返回其节日,若不是则返回空 OK

Private Function GetLunarFeast(ByVal sDate As String) As String

Dim i As Integer

Dim strTmp As String

strTmp = Right(sDate, 4)

For i = LBound(lFtv) To UBound(lFtv)

If Left(lFtv(i), 4) = strTmp Then

GetLunarFeast = Mid(lFtv(i), 5, Len(lFtv(i)) - 4)

Exit Function

End If

Next

GetLunarFeast = ""

End Function

'根据阴历返回其字符串 OK

Private Function GetLunarString(ByVal sDate As String) As String

Dim i As Integer

Dim strTmp As String

Dim strMonth As String

Dim strDay As String

strMonth = Left(sDate, 2)

strDay = Right(sDate, 2)

If strDay = "01" Then

GetLunarString = nStr1(Val(strMonth)) & "月"

ElseIf strDay = "20" Then

GetLunarString = "二十"

ElseIf strDay = "30" Then

GetLunarString = "三十"

Else

GetLunarString = nStr2(Val(Left(strDay, 1))) & nStr1(Val(Right(strDay, 1)))

End If

End Function

'返回阳历是该月的第几个星期几的字符串,如:0520表示5月份第2个星期日

Private Function GetMonthWeek(ByVal sDate As Date) As String

Dim D0 As Date

D0 = CDate(Year(sDate) & "-" & Month(sDate) & "-1")

GetMonthWeek = Format(Month(sDate), "00") & (Int((Day(sDate) - 1 + Weekday(D0) - 1) / 7) + 1) & Weekday(sDate) - 1

End Function

'天干地支计算 OK

Private Function cyclical(num) As String

cyclical = Gan((num - 1864) Mod 10) + Zhi((num - 1864) Mod 12)

End Function

'获取农历或节日说明

Private Function GetDayString(ByVal sDate As Date, ByRef lngColor As Long) As String

Dim strLunarDate As String

Dim strTmp As String

strTmp = GetTerm(sDate)

If strTmp <> "" Then GetDayString = strTmp: lngColor = vbGreen: Exit Function

strTmp = GetFeast(sDate)

If strTmp <> "" Then GetDayString = strTmp: lngColor = vbBlue: Exit Function

strLunarDate = GetLunar(sDate)

strTmp = GetLunarFeast(Right(strLunarDate, 4))

If strTmp <> "" Then GetDayString = strTmp: lngColor = vbRed: Exit Function

strTmp = GetLunarString(Right(strLunarDate, 4))

lngColor = vbBlack:

GetDayString = strTmp

End Function

保存即可.以后打开文档会自动进行排班,效果如下:

公元2006年5月 农历丙戌狗年

星期日

星期一

星期二

星期三

星期四

星期五

星期六

1

劳动节

2

劳动节

3

劳动节

4

青年节

5

初八

6

立夏

李四摧

周五输

吴六破

郑七灭

王八衰

鹤笔翁

7

十日

8

世界红十字日

9

十二

10

十三

11

十四

12

国际护士节

13

十六

赵一伤

钱二败

孙三毁

李四摧

周五输

吴六破

郑七灭

14

十七

15

国际家庭日

16

十九

17

国际电信日

18

廿一

19

廿二

20

廿三

王八衰

鹤笔翁

赵一伤

钱二败

孙三毁

李四摧

周五输

21

小满

22

廿五

23

廿六

24

廿七

25

廿八

26

廿九

27

五月

吴六破

郑七灭

王八衰

鹤笔翁

赵一伤

钱二败

孙三毁

28

初二

29

初三

30

初四

31

端午节

李四摧

周五输

吴六破

郑七灭

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有