Kiểm tra file có tồn tại hay không dựa vào list excel (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

hunglao

Thành viên hoạt động
Tham gia
30/8/09
Bài viết
118
Được thích
17
Chào các a/c


Hôm trước được thầy và các a/c chỉ giùm em cách tạo folder dựa vào list cho sẵn


Nay em lại nhờ tiếp :Kiểm tra file có tồn tại hay không dựa vào list excel :) :)




- Như file đính kèm, em muốn có 1 danh sách excel gồm
+ Mã số ở cột A
+ Đường dẫn ở cột Z


Em cần tạo một nút lệnh , khi nhấn nó sẽ quét mã số theo đường đẫn


-Nếu có thì nó sẽ xuất hiện ở cột Q dòng chữ " Open folder"
sẽ được link vào folder chưa file ( chứ ko phải link vào file nhé )trùng trên như " Mã số"


- Sau đó con trỏ chuột sẽ nhảy tới file đó ( nếu có nhiều file trùng tên nhưng khác đuôi
thì nó sẽ nhảy tới file đầu tiên)


Cảm ơn các a/c


10-29-2012 9-21-44 AM.jpg
 

File đính kèm

Chào các a/c
Hôm trước được thầy và các a/c chỉ giùm em cách tạo folder dựa vào list cho sẵn
Nay em lại nhờ tiếp :Kiểm tra file có tồn tại hay không dựa vào list excel :) :)

- Như file đính kèm, em muốn có 1 danh sách excel gồm
+ Mã số ở cột A
+ Đường dẫn ở cột Z

Em cần tạo một nút lệnh , khi nhấn nó sẽ quét mã số theo đường đẫn

-Nếu có thì nó sẽ xuất hiện ở cột Q dòng chữ " Open folder"
sẽ được link vào folder chưa file ( chứ ko phải link vào file nhé )trùng trên như " Mã số"
Theo như dữ liệu trong file của bạn thì tôi đề xuất hàm này:
PHP:
Function CheckFolderExists(ByVal Folder_Path As String) As Boolean
  On Error Resume Next
  If Left(Folder_Path, 1) = "\" Then Folder_Path = ThisWorkbook.Path & Folder_Path
  CheckFolderExists = CreateObject("Scripting.FileSystemObject").FolderExists(Folder_Path)
End Function
Giờ bạn gõ vào cell Q2 công thức sau:
Mã:
=IF(CheckFolderExists(Z2),HYPERLINK(LEFT(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1))-2)&Z2,"Open Folder"),"")
Kéo fill xuống!
Cell nào xuất hiện chữ "Open Folder", bạn chỉ cần đưa chuột vào, khi thấy chuột biến thành biểu tượng bàn tay, ta có thể bấm vào để link ---> Khỏi cần nút nhấn chạy lệnh gì cả
--------------
Lưu ý: File chứa macro phải lưu ở định dạng xlsm nhé (lưu bằng xlsx, macro sẽ bị xóa sạch)
----------------------
- Sau đó con trỏ chuột sẽ nhảy tới file đó ( nếu có nhiều file trùng tên nhưng khác đuôi
thì nó sẽ nhảy tới file đầu tiên)
Cái vụ này để tính sau! Các cao thủ khác thử xem!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thầy kiểm tra lại giùm em

- Như file đó thì nó chỉ check folder có hay không thôi
- Cái em cần là check file có tên giống như ở cột "Mã số" có hay ko
 
Upvote 0
Thầy kiểm tra lại giùm em

- Như file đó thì nó chỉ check folder có hay không thôi
- Cái em cần là check file có tên giống như ở cột "Mã số" có hay ko

Sửa hàm thành vầy:
Mã:
Function CheckFileExists(ByVal Folder_Path As String, ByVal FileName As String) As Boolean
  On Error Resume Next
  If Left(Folder_Path, 1) = "\" Then Folder_Path = ThisWorkbook.Path & Folder_Path
  If Right(Folder_Path, 1) <> "\" Then Folder_Path = Folder_Path & "\"
  With CreateObject("Scripting.FileSystemObject")
    If .FolderExists(Folder_Path) Then
      CheckFileExists = .FileExists(Folder_Path & FileName)
    End If
  End With
End Function
Và sửa luôn công thức tại Q2 thành:
Mã:
=IF(CheckFileExists(Z2,A2&".jpg"),HYPERLINK(LEFT(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1))-2)&Z2,"Open Folder"),"")
Lưu ý: Tôi thấy trong thư mục của bạn có rất nhiều loại file khác nhau (jpg, txt...) ---> Muốn check loại nào phải ghi rõ nha
 
Upvote 0
Sửa hàm thành vầy:
Mã:
Function CheckFileExists(ByVal Folder_Path As String, ByVal FileName As String) As Boolean
  On Error Resume Next
  If Left(Folder_Path, 1) = "\" Then Folder_Path = ThisWorkbook.Path & Folder_Path
  If Right(Folder_Path, 1) <> "\" Then Folder_Path = Folder_Path & "\"
  With CreateObject("Scripting.FileSystemObject")
    If .FolderExists(Folder_Path) Then
      CheckFileExists = .FileExists(Folder_Path & FileName)
    End If
  End With
End Function
Và sửa luôn công thức tại Q2 thành:
Mã:
=IF(CheckFileExists(Z2,A2&".jpg"),HYPERLINK(LEFT(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1))-2)&Z2,"Open Folder"),"")
Lưu ý: Tôi thấy trong thư mục của bạn có rất nhiều loại file khác nhau (jpg, txt...) ---> Muốn check loại nào phải ghi rõ nha

EM chỉ cần quan tâm tới phần tên file, còn đuôi này ( jpg, txt) không quan trọng lắm ạ. chỉ cần phần tên file giống là được

Vẫn đang chờ giải pháp cho con trỏ chuột nhảy tới tên file của thầy, thầy giúp em nhé

Thanks
 
Upvote 0
EM chỉ cần quan tâm tới phần tên file, còn đuôi này ( jpg, txt) không quan trọng lắm ạ. chỉ cần phần tên file giống là được

Vẫn đang chờ giải pháp cho con trỏ chuột nhảy tới tên file của thầy, thầy giúp em nhé

Thanks

=IF(CheckFileExists(Z2,A2&".jpg"),HYPERLINK(LEFT(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1))-2)&Z2,"Open Folder"),"")
em thử bỏ đuôi ra ( tức là chỉ quan tâm tới tên thì thấy nó ko chạy), thầy kiểm tra hộ em với
 
Upvote 0
em thử bỏ đuôi ra ( tức là chỉ quan tâm tới tên thì thấy nó ko chạy), thầy kiểm tra hộ em với

Cũng hơi mệt à nghen
1> Code trong module:
Mã:
Function CheckFileExists(ByVal Folder_Path As String, ByVal FileName As String) As String
  Dim fleItem
  On Error Resume Next
  Application.Volatile
  If Left(Folder_Path, 1) = "\" Then Folder_Path = ThisWorkbook.Path & Folder_Path
  If Right(Folder_Path, 1) <> "\" Then Folder_Path = Folder_Path & "\"
  With CreateObject("Scripting.FileSystemObject")
    If .FolderExists(Folder_Path) Then
      For Each fleItem In .GetFolder(Folder_Path).Files
        If fleItem.Name Like FileName & "*" Then
          CheckFileExists = fleItem.Path
          Exit For
        End If
      Next
    End If
  End With
End Function
Mã:
Sub GotoFile(ByVal Folder_Path As String, ByVal FileName As String)
  Dim flePath As String
  On Error Resume Next
  flePath = CheckFileExists(Folder_Path, FileName)
  If Len(flePath) Then
     Shell "Explorer.exe /Select, " & """" & flePath & """", 1
  End If
End Sub
2> Công thức cho Q2:
PHP:
=IF(LEN(CheckFileExists(Z2,A2)),"Open Folder","")
3> Code cho sự kiện SelectionChange của sheet1:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim fldName As String, fleName As String
  On Error Resume Next
  If Not Intersect(Range("Q2:Q15"), Target) Is Nothing Then
    If Target.Count = 1 Then
      If Target.Value = "Open Folder" Then
        fldName = Cells(Target.Row, "Z").Value
        fleName = Cells(Target.Row, "A").Value
        GotoFile fldName, fleName
      End If
    End If
  End If
End Sub
-----------------
Tôi chỉ gửi 1 file kiem tra file.xlsm, bạn tự cho vào thư mục của bạn rồi kiểm tra nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thầy kiểm tra lại giúp em mấy vấn đề này với


1. Em copy công thức qua file khác
thấy nó có tìm dc file nhưng ko mở folder lên được


2. Có một vấn đề khi file tìm được nhiều, vd như vài trăm
thì công thức chạy rất rất lâu, em kiểm tra với khoang 50 file thì thấy nó chạy tới 10s
mỗi lần filter hay bỏ filter thì công thức nó lại chạy lại từng đó thời gian


3. Em nghĩ, công thức chỗ : "open folder" chỉ cần bỏ link vào là được
khi vào cần thì click vào tên để nó tự mở




Em cảm ơn thầy trước
 

File đính kèm

Upvote 0
Thầy kiểm tra lại giúp em mấy vấn đề này với


1. Em copy công thức qua file khác
thấy nó có tìm dc file nhưng ko mở folder lên được


2. Có một vấn đề khi file tìm được nhiều, vd như vài trăm
thì công thức chạy rất rất lâu, em kiểm tra với khoang 50 file thì thấy nó chạy tới 10s
mỗi lần filter hay bỏ filter thì công thức nó lại chạy lại từng đó thời gian


3. Em nghĩ, công thức chỗ : "open folder" chỉ cần bỏ link vào là được
khi vào cần thì click vào tên để nó tự mở




Em cảm ơn thầy trước
Trong sự kiện SelectionChange của sheet DataBase có đoạn
fldName = Cells(Target.Row, "Z").Value
Tức dò tìm đường dẫn ở cột Z, giờ bạn đổi thành cột U thì phải sửa lại cho chính xác
fldName = Cells(Target.Row, "U").Value
-------------------
File chưa nhiều dữ liệu, vậy ta không nên dùng công thức. Tôi viết lại 1 sub khác, tự động chèn chữ "Open Folder" vào cột G khi file vừa khởi động. Bạn cũng có thể tự cập nhật bằng cách bấm Alt + F8 và chạy Sub Main
PHP:
Sub Main()
  Dim aRes, aFolders, aFiles
  Dim wks As Worksheet
  Dim sChk As String, fldItem As String, fleItem As String
  Dim lR As Long
  On Error Resume Next
  Set wks = Sheets("Database")
  aRes = wks.Range("G2:G10000").Value
  aFolders = wks.Range("U2:U10000").Value
  aFiles = wks.Range("A2:A10000").Value
  For lR = 1 To UBound(aRes, 1)
    If Len(aFolders(lR, 1)) Then
      fldItem = aFolders(lR, 1)
      If Len(aFiles(lR, 1)) Then
        fleItem = aFiles(lR, 1)
        sChk = CheckFileExists(fldItem, fleItem)
        If Len(sChk) Then
          aRes(lR, 1) = "Open Folder"
        Else
          aRes(lR, 1) = vbNullString
        End If
      End If
    End If
  Next
  wks.Range("G2:G10000").Value = aRes
  MsgBox "Da cap nhat xong!"
End Sub
Giờ thì chẳng có công thức nào nữa, khỏi lo file nặng nhé
 

File đính kèm

Upvote 0
Trong sự kiện SelectionChange của sheet DataBase có đoạn
fldName = Cells(Target.Row, "Z").Value
Tức dò tìm đường dẫn ở cột Z, giờ bạn đổi thành cột U thì phải sửa lại cho chính xác
fldName = Cells(Target.Row, "U").Value
-------------------
File chưa nhiều dữ liệu, vậy ta không nên dùng công thức. Tôi viết lại 1 sub khác, tự động chèn chữ "Open Folder" vào cột G khi file vừa khởi động. Bạn cũng có thể tự cập nhật bằng cách bấm Alt + F8 và chạy Sub Main
PHP:
Sub Main()
  Dim aRes, aFolders, aFiles
  Dim wks As Worksheet
  Dim sChk As String, fldItem As String, fleItem As String
  Dim lR As Long
  On Error Resume Next
  Set wks = Sheets("Database")
  aRes = wks.Range("G2:G10000").Value
  aFolders = wks.Range("U2:U10000").Value
  aFiles = wks.Range("A2:A10000").Value
  For lR = 1 To UBound(aRes, 1)
    If Len(aFolders(lR, 1)) Then
      fldItem = aFolders(lR, 1)
      If Len(aFiles(lR, 1)) Then
        fleItem = aFiles(lR, 1)
        sChk = CheckFileExists(fldItem, fleItem)
        If Len(sChk) Then
          aRes(lR, 1) = "Open Folder"
        Else
          aRes(lR, 1) = vbNullString
        End If
      End If
    End If
  Next
  wks.Range("G2:G10000").Value = aRes
  MsgBox "Da cap nhat xong!"
End Sub
Giờ thì chẳng có công thức nào nữa, khỏi lo file nặng nhé

em cảm ơn thầy nhiều


Đã test lại trên dữ liệu của em


- Hiện tại dữ liệu của em có khoàng 2000 mã số ( hàng)
- Sau khi quét mã số với file có được 50 cái ( open folder)
- Thời gian quét hết khoảng 30s


--> Không biết nếu dữ liệu của em có đủ 2000 cái chắc quét hết cả 10 phút
hả thầy


Thầy kiểm tra giùm em nhé
 
Upvote 0
em cảm ơn thầy nhiều


Đã test lại trên dữ liệu của em


- Hiện tại dữ liệu của em có khoàng 2000 mã số ( hàng)
- Sau khi quét mã số với file có được 50 cái ( open folder)
- Thời gian quét hết khoảng 30s


--> Không biết nếu dữ liệu của em có đủ 2000 cái chắc quét hết cả 10 phút
hả thầy


Thầy kiểm tra giùm em nhé
Dám bảo đảm với bạn rằng code chạy rất nhanh, chỉ mất chừng vài giây cho 20,000 dòng dữ liệu
Nếu có chậm thì đó là do ảnh hưởng của công thức hiện có trên file của bạn. Cụ thể tại sheet Database, cột R, S, T, U đang chứa công thức
Vậy nếu bạn muốn file hoạt động nhanh, hãy copy toàn bộ công thức, Paste Special\Values tất cả là giải quyết được ngay vấn đề tốc độ
 
Upvote 0
Dám bảo đảm với bạn rằng code chạy rất nhanh, chỉ mất chừng vài giây cho 20,000 dòng dữ liệu
Nếu có chậm thì đó là do ảnh hưởng của công thức hiện có trên file của bạn. Cụ thể tại sheet Database, cột R, S, T, U đang chứa công thức
Vậy nếu bạn muốn file hoạt động nhanh, hãy copy toàn bộ công thức, Paste Special\Values tất cả là giải quyết được ngay vấn đề tốc độ

Em đãm làm như thầy bảo thậm chí cả xóa luôn 1 số cột và vẫn lâu thây ơi

http://www.mediafire.com/?5oegf57yaz2rj1r

File nặng hơn 5mb nên em up lên đây
 
Upvote 0
Upvote 0
Không lý nào!
Hiện nay trên thị trường thậm chí dòng Core 2 cũng không còn nữa. Bèo nhất là I3. Vậy xem ra máy tôi mới là CỦI
thầy cho em hỏi, là mỗi khi mình chạy lênh ( Alt+F8) là nó sẽ xóa dữ liệu cũ, đè lên dữ liệu mới ( Open foler) hay là nó chỉ bổ sung những cái mỡi xuất hiện thôi ạ
 
Upvote 0
thầy cho em hỏi, là mỗi khi mình chạy lênh ( Alt+F8) là nó sẽ xóa dữ liệu cũ, đè lên dữ liệu mới ( Open foler) hay là nó chỉ bổ sung những cái mỡi xuất hiện thôi ạ

Nó sẽ làm mới lại toàn bộ vì ai mà biết được những cái cũ có còn đúng hay không (chẳng hạn bạn đã chỉnh sửa gì đó tên file và tên thư mục)
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom