Board logo

標題: [發問] 關閉特定excel檔案 [打印本頁]

作者: pointchi    時間: 2021-11-17 10:49     標題: 關閉特定excel檔案

公司ERP系統會下載一個EXCEL檔案,我的帳號登入後如果下載該資料,
第一次會轉出檔名Link.xls的資料檔
第二次會轉出檔名Link(1).xls的資料檔
第三次會轉出檔名Link(2).xls的資料檔
如果我帳號一直沒有登出,第N次就會轉出檔名Link(N-1).xls的資料檔

之後我會將Link.xls整頁手工複製貼上至  主檔.xlsm 其中一個頁面,然後開始執行VBA處理資料,最後我想省下一道工,就是用VBA也將Link.xls關閉(不用存檔)。
目前遇到的問題是當要關閉的檔名是Link(1).xls的時候無法關閉,請問要如何撰寫這部分的程序。

Sub Test1()
    Workbooks("Link").Activate
    Workbooks("Link").Close
End Sub
作者: samwang    時間: 2021-11-17 11:57

回復 1# pointchi

'FPath= "D:\Link.xls"
Set WB = Workbooks.Open('FPath檔案來源路徑)
WB.Close
作者: pointchi    時間: 2021-11-18 11:20

S 大,我將您說明的字串加入我的VBA,當檔案為Link是可以自動關閉,可是Link(1)...Link(N-1)時仍無法關閉,請問是否我有哪邊錯誤,附上我的VBA

Sub step01()
    a = Cells(13, 4)
    If Len(a) >= 28 Then
        Worksheets("raw").Cells(13, 4).Font.Name = "Arial"
        Worksheets("raw").Cells(13, 4).Font.Size = 35
        Worksheets("raw").Cells(13, 4).Font.FontStyle = "粗體"
    Else
        Worksheets("raw").Cells(13, 4).Font.Name = "Arial"
        Worksheets("raw").Cells(13, 4).Font.Size = 48
        Worksheets("raw").Cells(13, 4).Font.FontStyle = "粗體"
    End If
   
    Set WB = Workbooks.Open("C:\Users\Point\Downloads\link.xlsm")
    WB.Close

End Sub
作者: samwang    時間: 2021-11-18 12:15

回復 3# pointchi

我將您說明的字串加入我的VBA,當檔案為Link是可以自動關閉,可是Link(1)...Link(N-1)時仍無法關閉,請問是否我有哪邊錯誤,附上我的VBA
>> 看你的程式只有針對Link動作,其它的沒有,還是方便可以附上檔案,描述需求結果,謝謝
作者: pointchi    時間: 2021-11-18 22:47

S大您好,
附檔解壓縮後,TEST1是我的主檔,Link是我的資料來源檔案。
我會將Link整頁手工複製貼上至 TEST1的Raw標籤頁,然後開始執行VBA處理資料,最後我想省下一道工,就是用VBA也將Link.xls關閉(不用存檔)。
目前我可以自動關閉Link的檔案。

可是因為公司的ERP系統於我的帳號登入後下載該資料,
第一次會轉出檔名Link.xls的資料檔
第二次會轉出檔名Link(1).xls的資料檔
第三次會轉出檔名Link(2).xls的資料檔
如果我帳號一直沒有登出,第N次就會轉出檔名Link(N-1).xls的資料檔

因此我第二次作業TEST1的檔案時,資料來源的檔案檔名為Link(1),VBA因為只找尋Link但找不到,就無法自動關閉Link(1)
以此類推,我第三次作業TEST1時,來源的檔案檔名為Link(2)。
有甚麼語法可以不管我第N次執行TEST1時,來源的檔名為Link(N-1),VBA能夠關閉Link(N-1)這個檔案。
[attach]34408[/attach]
作者: samwang    時間: 2021-11-19 07:40

S大您好,
附檔解壓縮後,TEST1是我的主檔,Link是我的資料來源檔案。
我會將Link整頁手工複製貼上至 TES ...
pointchi 發表於 2021-11-18 22:47


如果我帳號一直沒有登出,第N次就會轉出檔名Link(N-1).xls的資料檔
>>只要登入後沒有執行任何動作,ERP會自動幫你轉出資料檔嗎? 轉出後會自動幫你存檔?

我會將Link整頁手工複製貼上至 TEST1的Raw標籤頁,然後開始執行VBA處理資料,最後我想省下一道工,就是用VBA也將Link.xls關閉(不用存檔)。目前我可以自動關閉Link的檔案。
>>建議登入ERP後下載資料檔後,然後用VBA執行,選取由ERP轉出資料檔-->執行處理資料-->關閉資料檔案
作者: pointchi    時間: 2021-11-19 11:42

回復 6# samwang
如果我帳號一直沒有登出,第N次就會轉出檔名Link(N-1).xls的資料檔
>>只要登入後沒有執行任何動作,ERP會自動幫你轉出資料檔嗎? 轉出後會自動幫你存檔?
>>登入ERP後,如有要作業時才手動按ERP上的匯出按鈕,ERP會匯出成Link.xls,再重登入ERP之前,每次匯出的檔名會依序+1,為Link.xls,Link(1).xls,Link(2).xls,Link(N-1).xls...
     所以如果我第5次按匯出按鈕,匯出的檔名為Link(4).xls,不然我就是每次要匯出檔案前先登出再重登入ERP,這樣匯出的檔才會是Link.xls,VBA才不會出現錯誤訊息


我會將Link整頁手工複製貼上至 TEST1的Raw標籤頁,然後開始執行VBA處理資料,最後我想省下一道工,就是用VBA也將Link.xls關閉(不用存檔)。目前我可以自動關閉Link的檔案。
>>建議登入ERP後下載資料檔後,然後用VBA執行,選取由ERP轉出資料檔-->執行處理資料-->關閉資料檔案
>>ERP下載資料檔後,我原本也想用VBA執行,可是同樣遇到我要選取的檔案Link.xls可行,可是第2次以後變成Link(1).xls,VBA就無法找到。
      因此我才每次先手動複製至作業主檔TEST1的Raw標籤頁,最少VBA可以執行我大部分重複工作,只是開頭要手動複製頁面,結尾要手動關閉檔案。


我是想說如果可以於作業結束,VBA幫我也順便將Link(N-1).xls的檔案關閉,我也就可以研究如何複製Link(N-1).xls的檔案至作業主檔TEST1的Raw標籤頁
作者: samwang    時間: 2021-11-19 12:11

本帖最後由 samwang 於 2021-11-19 12:14 編輯

回復 7# pointchi

我會將Link整頁手工複製貼上至 TEST1的Raw標籤頁,然後開始執行VBA處理資料,最後我想省下一道工,就是用VBA也將Link.xls關閉(不用存檔)。目前我可以自動關閉Link的檔案。
>>建議登入ERP後下載資料檔後,然後用VBA執行,選取由ERP轉出資料檔-->執行處理資料-->關閉資料檔案
>>ERP下載資料檔後,我原本也想用VBA執行,可是同樣遇到我要選取的檔案Link.xls可行,可是第2次以後變成Link(1).xls,VBA就無法找到
      因此我才每次先手動複製至作業主檔TEST1的Raw標籤頁,最少VBA可以執行我大部分重複工作,只是開頭要手動複製頁面,結尾要手動關閉檔案。
>>所以建議人工選取由ERP轉出資料檔-->VBA執行處理資料-->VBA關閉資料檔案,選取由ERP轉出資料檔(由人工選取需求檔案),這樣流程是否有比較好?
作者: pointchi    時間: 2021-11-19 21:39

本帖最後由 pointchi 於 2021-11-19 21:40 編輯

回復 8# samwang

我會將Link整頁手工複製貼上至 TEST1的Raw標籤頁,然後開始執行VBA處理資料,最後我想省下一道工,就是用VBA也將Link.xls關閉(不用存檔)。目前我可以自動關閉Link的檔案。
>>建議登入ERP後下載資料檔後,然後用VBA執行,選取由ERP轉出資料檔-->執行處理資料-->關閉資料檔案
>>ERP下載資料檔後,我原本也想用VBA執行,可是同樣遇到我要選取的檔案Link.xls可行,可是第2次以後變成Link(1).xls,VBA就無法找到。
      因此我才每次先手動複製至作業主檔TEST1的Raw標籤頁,最少VBA可以執行我大部分重複工作,只是開頭要手動複製頁面,結尾要手動關閉檔案。
>>所以建議1.人工(YES)選取由ERP轉出資料檔-->2.VBA(YES)執行處理資料-->3.VBA(這點我不太了解??)關閉資料檔案,選取由ERP轉出資料檔(由人工選取需求檔案),這樣流程是否有比較好?

      Sorry,我的意思可能S大誤會了,我目前的作業是
      1.手動按ERP上的匯出按鈕,匯出Link(N-1).xls
         手動選取ERP轉出資料檔Link(N-1).xls,手動複製至作業主檔TEST1的Raw標籤頁
      2.VBA執行處理TEST1資料
      3.手動選取第1點中ERP匯出的Link(N-1).xls並且關閉-->是否可以用VBA關閉Link(N-1).xls
作者: 准提部林    時間: 2021-11-21 09:33

dim linkbook as workbook
for each linkbook in workbooks
    if lcase(.name) like "link*.xls*" then .close 0
next
作者: pointchi    時間: 2021-11-21 22:20

回復 10# 准提部林
版大您好,
我將您的語法貼至我的內容,如下:

Sub step01()
        
    a = Cells(13, 5)
    If Len(a) >= 28 Then
        Worksheets("raw").Cells(13, 5).Font.Name = "Arial"
        Worksheets("raw").Cells(13, 5).Font.Size = 35
        Worksheets("raw").Cells(13, 5).Font.FontStyle = "粗體"
    Else

        Worksheets("raw").Cells(13, 5).Font.Name = "Arial"
        Worksheets("raw").Cells(13, 5).Font.Size = 48
        Worksheets("raw").Cells(13, 5).Font.FontStyle = "粗體"
    End If  

    Dim linkbook As Workbook
    For Each linkbook In Workbooks
        If LCase(.Name) Like "link*.xls*" Then .Close 0
        Next
   
End Sub

可是出現(.Name)錯誤訊息為"不正確的引用",是否因為我原本的VBA語法哪裡有錯誤,導致後續的異常。
作者: samwang    時間: 2021-11-22 08:18

回復 11# pointchi

看了准大回覆,套用他的回覆,應該可以符合您的需求了,請測試看看,謝謝

Dim wb As Workbook
For Each wb In Workbooks
    If LCase(wb.Name) Like "link*.xls*" Then wb.Close 0
Next
作者: pointchi    時間: 2021-11-22 22:30

回復 12# samwang


    感謝版大與S大,成功了~
    接下來我再來研究開頭的Link(N-1).xls檔案複製至作業主檔TEST1的Raw標籤頁




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