麻辣家族討論版版's Archiver

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

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117713&ptid=23484]1#[/url] [i]pointchi[/i] [/b]

'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

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117730&ptid=23484]3#[/url] [i]pointchi[/i] [/b]

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

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

[quote]S大您好,
附檔解壓縮後,TEST1是我的主檔,Link是我的資料來源檔案。
我會將Link整頁手工複製貼上至 TES ...
[size=2][color=#999999]pointchi 發表於 2021-11-18 22:47[/color] [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117747&ptid=23484][img]http://forum.twbts.com/images/common/back.gif[/img][/url][/size][/quote]

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

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

pointchi 發表於 2021-11-19 11:42

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117749&ptid=23484]6#[/url] [i]samwang[/i] [/b]
如果我帳號一直沒有登出,第N次就會轉出檔名Link(N-1).xls的資料檔
>>只要登入後沒有執行任何動作,ERP會自動幫你轉出資料檔嗎? 轉出後會自動幫你存檔?
[color=Blue]>>登入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才不會出現錯誤訊息[/color]

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

[color=Blue]我是想說如果可以於作業結束,VBA幫我也順便將Link(N-1).xls的檔案關閉,我也就可以研究如何複製Link(N-1).xls的檔案至作業主檔TEST1的Raw標籤頁[/color]

samwang 發表於 2021-11-19 12:11

[i=s] 本帖最後由 samwang 於 2021-11-19 12:14 編輯 [/i]

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117752&ptid=23484]7#[/url] [i]pointchi[/i] [/b]

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

pointchi 發表於 2021-11-19 21:39

[i=s] 本帖最後由 pointchi 於 2021-11-19 21:40 編輯 [/i]

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117753&ptid=23484]8#[/url] [i]samwang[/i] [/b]

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

      Sorry,我的意思可能S大誤會了,我目前的作業是
      [color=Lime]1.手動[/color]按ERP上的匯出按鈕,匯出Link(N-1).xls
         [color=Lime]手動[/color]選取ERP轉出資料檔Link(N-1).xls,手動複製至作業主檔TEST1的Raw標籤頁
     [color=Lime] 2.VBA[/color]執行處理TEST1資料
      [color=Blue]3.手動選取第1點中ERP匯出的Link(N-1).xls並且關閉-->是否可以用VBA關閉Link(N-1).xls[/color]

准提部林 發表於 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

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117785&ptid=23484]10#[/url] [i]准提部林[/i] [/b]
版大您好,
我將您的語法貼至我的內容,如下:

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[color=Red](.Name)[/color] Like "link*.xls*" Then .Close 0
        Next
   
End Sub

可是出現(.Name)錯誤訊息為"不正確的引用",是否因為我原本的VBA語法哪裡有錯誤,導致後續的異常。

samwang 發表於 2021-11-22 08:18

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117789&ptid=23484]11#[/url] [i]pointchi[/i] [/b]

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

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

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117790&ptid=23484]12#[/url] [i]samwang[/i] [/b]


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

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供