iT邦幫忙

0

Excel VBA 檔名擷取疑問

  • 分享至 

  • xImage
Sub 檢查檔名()
Dim FileName, PathName, FileCheck As String
PathName = "L:\報告審查區\"
j = InputBox("請輸入筆數")
For i = 2 To j + 1
FileName = Range("A" & i) & ".xlsm"
FileCheck = Dir(PathName & FileName)
If FileCheck = FileName Then
    Range("K" & i) = "已完成"
Else
    Range("K" & i) = "未完成"
End If
Next
End Sub

請問上述語法判斷檔名必須包含副檔名,有什麼方式可以不要判斷副檔做比對?
另請教,如何判斷檔名前幾個字元相符就shoe出資料?
以上請專家指導,感激不盡。

補充說明

要比對的檔案在L:\報告審查區\底下,這裡頭包含了多種副檔名的檔案,但檔名是報告編號+廠商名稱,圖片上只要檔名符合報告編號,狀態列就顯示"已完成"。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
aaron3399
iT邦好手 1 級 ‧ 2023-01-05 10:42:07
最佳解答

試試這個
用LEFT取左邊固定11位數

Sub 檢查檔名()
Dim FileName, PathName, FileCheck As String
PathName = "L:\報告審查區\"
j = InputBox("請輸入筆數")
For i = 2 To j + 1

FileName = Range("A" & i) & ".*"     '取所有副檔名類型
FileCheck = Left(Dir(PathName & FileName), 11)

If FileCheck = Left(FileName, 11) Then
    Range("K" & i) = "已完成"
Else
    Range("K" & i) = "未完成"
End If
Next
End Sub

您好,謝謝您的指教,我將與法修改如下:

Sub 檢查檔名()
Dim FileName, PathName, PathDone, FileCheck, FileDone As String

PathName = "L:\報告審查區\"
PathDone = "L:\報告完成區\"

j = InputBox("請輸入筆數")
For i = 2 To j + 1
FileName = Range("A" & i) & ".*"

FileCheck = Left(Dir(PathName & FileName), 11)
FileDone = Left(Dir(PathDone & FileName), 11)

If FileCheck = Left(FileName, 11) Then
    Range("K" & i) = "已完成(未審核)"
ElseIf FineDone = Left(FileName, 11) Then
    Range("K" & i) = "已完成(已審核)"
Else
    Range("K" & i) = "未完成"
End If
Next
End Sub

判斷PathDone的檔案時會無法比對檔名,例如檔名為"XX220819A01廠商名稱.pdf" 無法判別前11個字元相同後顯示"已完成(已審核)"。

請指教,非常感激。

aaron3399 iT邦好手 1 級 ‧ 2023-01-05 14:39:56 檢舉

原本 FileName = Range("A" & i) & ".*"
只會抓到 XX220819A01.*
因此無法與XX220819A01廠商名稱.* 字串符合

試試把filename修改如下:

FileName = Range("A" & i) & "*.*"

你可以自己在filename以及filecheck、filedone下一行插入msgbox
例如msgobx FileName
來檢測自己抓到的字串

您好,程式修改如下就可正常判斷了。

FileName = Range("A" & i) & "*.*"
'MsgBox FileName
FileCheck = Left(Dir(PathName & FileName), 11) & ""
'MsgBox FileCheck
FileDone = Left(Dir(PathDone & FileName), 11) & ""
'MsgBox FileDone

非常謝謝您幫了大忙,感激不盡。

我要發表回答

立即登入回答