返回列表 上一主題 發帖

[發問] 更新日期+假日不更新

[發問] 更新日期+假日不更新

最近寫了一段自動更新的語法
但是有遇到兩個問題
1.
外單位的Excel檔名會依照日期去修改,要如何寫VBA讓抓取的指定路徑名稱跟日期一樣
Workbooks.Open ("\\SMK\B.各組資料 (Team inform)\E.生管組 (PPC group)\D.生產相關\2.每日模具異動\模具異動-六福\2023.04.13 每日模具異動.xlsx")
Workbooks.Open ("\\SMK\B.各組資料 (Team inform)\E.生管組 (PPC group)\X.自動化工具(勿刪)\模具異動-六福(急件1.9專用)\LF每日模具異動.xlsx")
Workbooks("LF每日模具異動.xlsx").Worksheets("LF").Range("A:AG").ClearContents
Workbooks("2023.04.13 每日模具異動.xlsx").Worksheets("LF").Columns("A:AG").Cells.Copy
Workbooks("LF每日模具異動.xlsx").Worksheets("LF").Range("A:AG").PasteSpecial Paste:=xlPasteValues
六幅異動表.PNG

2.
六日無人上班所以不會更新,要如何寫VBA讓系統遇到假日不執行更新
Private Sub Workbook_Open()
    Application.OnTime TimeValue("06:00:00"), "full_calc"
End Sub

回復 2# Andy2483

非常感謝Andy2483大大的解答
第一個問題解決了

第二個解決辦法,小弟真的看不懂
可以請Andy2483大大說明嗎??
其實我的需求很簡單,遇到六日時就讓VBA去抓星期五的日期就好
補班or連假的問題可以先避開沒關係

TOP

回復 4# Andy2483

因為自動執行的時間是指定在早上06:00開始,也就是說抓的外單位檔案名稱的日期會是昨天的(過了00:00)
Private Sub Workbook_Open()
    Application.OnTime TimeValue("06:00:00"), "full_calc"
End Sub

請問Andy2483大大,可不可以把Workbooks.Open......"B"改成"B-1"就可以在早上06:00自動執行時抓到昨天日期的外單位資料??
A = Format(Date, "W")
B = Format(Switch(A = 7, Date - 1, A = 1, Date - 2, A > 1, Date), "yyyy.mm.dd")
Workbooks.Open ("\\SMK\B.各組資料 (Team inform)\E.生管組 (PPC group)\D.生產相關\2.每日模具異動\模具異動-六福\" & B - 1 & " 每日模具異動.xlsx")

TOP

回復 6# Andy2483

非常感謝Andy2483大大的指導

請問紅色字體那段哪裡寫錯了??
2023.04.14 每日模具異動->是因為日期和文字之間有一個空格造成的嗎??
'開啟六幅異動表
A = Format(Date, "W")
B = Format(Switch(A = 7, Date - 1, A = 1, Date - 2, A = 2, Date - 3, A > 2, Date - 1), "yyyy.mm.dd")
MsgBox B
Workbooks.Open ("\\SMK\B.各組資料 (Team inform)\E.生管組 (PPC group)\D.生產相關\2.每日模具異動\模具異動-六福\" & B & " 每日模具異動.xlsx")


MsgBox B->顯示的日期沒有問題
訊息方塊.PNG

TOP

回復 8# Andy2483


非常抱歉
剛剛檢查了所有會使用到的excel發現
六幅異動表的日期在凌晨03:21就更新日期
以前都是早上08:00之後才更改,所以自動執行的時間我才會設定06:00
六福.PNG

剛剛把語法改成A>1,date就沒問題了

非常感謝Andy2483大大的指導

TOP

回復 7# cowww

請問這段判斷式哪裡寫錯了
我希望系統先去找當天日期的異動表,可是它都是去找昨天的日期
如果"有"->執行If
如果"沒有"->再Else
A = Format(Date, "W")
If B = Format(Date, "yyyy.mm.dd") Then
Workbooks.Open ("\\shl-group.com\dept\MFMG\B.各組資料 (Team inform)\E.生管組 (PPC group)\D.生產相關\2.每日模具異動\模具異動-六福\" & B & " 每日模具異動.xlsx")

Else: B = Format(Switch(A = 7, Date - 1, A = 1, Date - 2, A = 2, Date - 3, A > 2, Date - 1), "yyyy.mm.dd")
Workbooks.Open ("\\shl-group.com\dept\MFMG\B.各組資料 (Team inform)\E.生管組 (PPC group)\D.生產相關\2.每日模具異動\模具異動-六福\" & B & " 每日模具異動.xlsx")

TOP

回復 14# Andy2483

非常感謝Andy2483大大的解答
看看明天是否會成功

明明有寫關閉提示的語法,為何開啟其他單位的異動表還是要輸入密碼呢??
'關閉提示
Application.DisplayAlerts = False

T = "\\shl-group.com\dept\MFMG\B.各組資料 (Team inform)\E.生管組 (PPC group)\D.生產相關\2.每日模具異動\模具異動-六福\"
A = Format(Date, "W")
B = Format(Date, "yyyy.mm.dd")
If Dir(T & B & " 每日模具異動.xlsx") = Empty Then
   B = Format(Switch(A = 7, Date - 1, A = 1, Date - 2, A = 2, Date - 3, A > 2, Date - 1), "yyyy.mm.dd")
   If Dir(T & B & " 每日模具異動.xlsx") = Empty Then MsgBox "找不到 " & B & " 檔案": Exit Sub
End If
Workbooks.Open (T & B & " 每日模具異動.xlsx")
密碼.PNG

TOP

回復 14# Andy2483


抱歉
Andy2483大大
我是新手(為了工作被迫學函數和VBA),不會寫迴圈

TOP

回復 18# Andy2483


非常感謝Andy2483大大的解答
但是我還是不知道那段語法要放哪個位置
我另外做一個按鈕來測試是否能夠開啟
Sub 按鈕2_Click()
T = "\\shl-group.com\dept\MFMG\B.各組資料 (Team inform)\E.生管組 (PPC group)\X.自動化工具(勿刪)\模具異動-六福(急件1.9專用)\"

A = Format(Date, "W")
B = Format(Date, "yyyy.mm.dd")
If Dir(T & B & " 每日模具異動.xlsx") = Empty Then
   For i = 0 To 10
   B = Format(Date - i, "yyyy.mm.dd")
   If Dir(T & B & " 每日模具異動.xlsx") = Empty Then MsgBox "找不到 " & B & " 檔案": Exit Sub
   Next
End If
Workbooks.Open filename:=T & B & " 每日模具異動.xlsx", ReadOnly:=True
End Sub
只抓第一天.PNG

TOP

回復 20# Andy2483

成功了
非常感謝Andy2483大大解答

有個地方我看不懂
If Dir(T & B & " 每日模具異動.xlsx") <> Empty Then GoTo i01

<>為何是用不等於的符號

TOP

        靜思自在 : 改變自己是自救,影響別人是救人。
返回列表 上一主題