Board logo

標題: 每年的第一個工作與最後一個工作天 [打印本頁]

作者: myleoyes    時間: 2010-8-19 21:29     標題: 每年的第一個工作與最後一個工作天

各位前輩你們好!
        前輩!
              這是每年的最後一天
             If Month(Date) = 12 And Day(Date) = 31 Then 夢想
             請問每年最後一個工作天程式如何?
             這是每年的第一天
             If Month(Date) = 1 And Day(Date) = 1 Then 成真
             請問每年的第一個工作一天程式如何?
             請知道的前輩,不吝賜教謝謝再三!!
作者: Hsieh    時間: 2010-8-19 21:43

y = InputBox("輸入年度", , 2010)
MsgBox Format(Application.WorkDay(DateSerial(y - 1, 12, 31), 1), "yyyy/mm/dd")
MsgBox Format(Application.WorkDay(DateSerial(y + 1, 1, 1), -1), "yyyy/mm/dd")
作者: myleoyes    時間: 2010-8-21 09:46

回復 2# Hsieh
hsieh前輩你好!
       偶像前輩!謝謝!!這非小弟所需
       想嚕很久不知如何?解釋才能讓你明瞭
       簡單的說就是讓一個檔案精準無誤的執行
       無數的任務,所以必須要有正確的時間
       然而今年的最後一個工作天剛好是12月31日
       所以開啟檔案
       Private Sub Workbook_Open()
         If Month(Date) = 12 And Day(Date) = 31 Then 夢想
       End Sub
       Sub 夢想()
          Sheet1.Select
          Range("AM1") = DateSerial(Year(Date) + 1, 1, 1)
       End Sub
       先鋪設程式的軌跡(確認電腦的日期設定無誤),再由公式
       AN3=IF($AM3>DAY(DATE(YEAR($AM$1),AN$1+1,)),"",
       IF(WEEKDAY(DATE(YEAR($AM$1),AN$1,$AM3),2)=7,"",
       DATE(YEAR($AM$1),AN$1,$AM3)))製作行事曆
       等待跨年後的第一個工作天開啟檔案
       Private Sub Workbook_Open()
         If Month(Date) = 1 And Day(Date) = 3 Then 成真
       End Sub
       Sub 成真()
         If [AM1] < Date Then
         End If
       With Sheet1
         Set Rng = .Cells.Find(Date, lookat:=xlWhole)
         .Select
         If Not Rng Is Nothing Then Rng.Select Else MsgBox "找不到今天"
         End With
         ActiveCell.Offset(, 1).Select
       End Sub
       程式只要能找到今天,那一切就夢想成真,
       程式一個接著一個跑,任務就逐一的完成
       流程之間毫無提示,也無需輸入一氣呵成,
       這就是小弟的夢想...
       但問題是明年的第一個工作天是1月3日
       非1月1日,而明年的最後個工作天是12月30日
       而往後的年度呢?顯然小弟的這兩個程式都不適合
       所以才發表文章求助,請不吝賜教謝謝再三!!
作者: Hsieh    時間: 2010-8-21 11:40

本帖最後由 Hsieh 於 2010-8-21 21:38 編輯
  1. Private Sub Workbook_Open()
  2. y = CDate(Application.WorkDay(DateSerial(Year(Date) - 1, 12, 31), 1)) '今年的第一個工作天
  3. y1 = CDate(Application.WorkDay(DateSerial(Year(Date) + 1, 1, 1), -1)) '今年的最後一個工作天
  4. If Date = y1 Then '如果今天是今年的最後一個工作天
  5. MsgBox "Today is lastworkday for this year"
  6. ElseIf Date = y Then '如果今天是今年的第一個工作天
  7. MsgBox "Today is firstworkday for this year"
  8. End If
  9. End Sub
複製代碼

作者: GBKEE    時間: 2010-8-21 15:38

本帖最後由 GBKEE 於 2010-8-21 15:40 編輯

回復 3# myleoyes
2003無法使用  Application.WorkDay(DateSerial(Year(Date) - 1, 12, 31), 1) 程式碼
  1. Private Sub Workbook_Open()
  2.    If Evaluate("WORKDAY(""" & Year(Date) & "/1 "",1)") = Date Then 成真
  3.   If Evaluate("WORKDAY(""" & Year(Date) + 1 & "/1"",-1)") = Date Then 夢想
  4. End Sub
複製代碼

作者: myleoyes    時間: 2010-8-21 22:49

回復 5# GBKEE
hsieh前輩你好!
       偶像前輩!謝謝!!哇讚耶!!謝謝再三!!
作者: myleoyes    時間: 2010-8-21 22:51

回復 5# GBKEE
GBKEE前輩你好!
   良師!謝謝!程式有誤喔!
      型態不符合,如附檔Leo27-2
      正確應該如附檔Leo27-1
      先將日期調整至2010/12/31
      開啟檔案程式在AM1建立日期存檔關閉
      再日期調整至2011/1/3
      開啟檔案程式顯示夢想成真就對囉!!
      請參考看看謝謝再三!!
作者: Hsieh    時間: 2010-8-21 23:04

[attach]2521[/attach]版本若不支援,自己寫函數,366天花不了太多時間
  1. Function MyWorkday(y%, t%)
  2. Dim Ar()
  3. For i = DateSerial(y, 1, 1) To DateSerial(y, 12, 31)
  4.    If Weekday(i, 2) < 6 Then
  5.    ReDim Preserve Ar(s)
  6.    Ar(s) = i
  7.    s = s + 1
  8.    End If
  9. Next
  10. If t = 0 Then
  11.    MyWorkday = Ar(0) '第一個工作天
  12.    ElseIf t = 1 Then
  13.    MyWorkday = Ar(s - 1) '最後工作天
  14. End If
  15. End Function
複製代碼

作者: GBKEE    時間: 2010-8-22 07:22

回復 7# myleoyes
回復  myleoyes
2003無法使用  Application.WorkDay(DateSerial(Year(Date) - 1, 12, 31), 1) 程式碼
GBKEE 發表於 2010-8-21 15:38

我的版本 是 2003      我不知道 2007 無法使用 Evaluate
作者: myleoyes    時間: 2010-8-22 11:40

回復 9# GBKEE
hsieh前輩你好!
       偶像前輩!謝謝!!謝謝再三!!

GBKEE前輩你好!
   良師!謝謝!小弟以為存成2007格式就可以
      執行還是不行哈哈!!謝謝再三!!
作者: Emily    時間: 2010-8-23 19:01

各位你好, 初到貴境

最後一個工作天
  1. Function LastFridayInMonth(lngYear As Long, lngMonth As Long) As Date
  2.     Dim lngLastDay As Long
  3.     'define last day of the month of interest:
  4.     lngLastDay = DateSerial(lngYear, lngMonth + 1, 0)
  5.     'use to get last friday:
  6.     LastFridayInMonth = lngLastDay - WeekDay(lngLastDay, vbFriday) + 1
  7. End Function

  8. Sub Check_Last_WorkDay()

  9. MsgBox LastFridayInMonth(2011, 12)

  10. End Sub
複製代碼

作者: Hsieh    時間: 2010-8-23 19:38

本帖最後由 Hsieh 於 2010-8-23 19:40 編輯

回復 9# GBKEE
2007也可使用Evaluate

    firstworkday = CDate(Evaluate("WORKDAY(DATE(YEAR(TODAY()),1,0),1)"))




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)