Quản lý tệp tin trong cùng thư mục.

Liên hệ QC

titanic20072007

Thành viên thường trực
Tham gia
10/7/07
Bài viết
213
Được thích
8
Nghề nghiệp
Giáo viên
Tôi có một tệp tin tổng hợp dữ liệu từ 30 tệp tin khác. Tôi muốn khi mở tệp tin tổng hợp này thì hiện thông báo các tệp tin nào còn thiếu trong cùng thư mục để mình biết. Vậy có cách nào làm được việc này không. Xin các huynh chỉ giáo. Cảm ơn.
 
Bạn có thể làm theo hướng sau : Bạn dùng hàm FileExits() để kiểm tra sự tồn tại của File trong thư mục.
PHP:
Function FileExists(ByVal FName) As Boolean
' Tra ve True neu file ton tai
' fname la duong dan bao gom luon ten tap tin
Dim x As String
    On Error GoTo TBLoiPath
    x = Dir(FName)
    If x <> "" Then FileExists = True Else FileExists = False
    Exit Function
TBLoiPath:
    FileExists = False
End Function
Như vậy bạn sẽ liệt kê tên 30 file vào 1 cột A của Sheet và cột B bạn nhập công thức FileExits(Path\FileName) Như vậy, Kết quả trả về là TRUE thì file đó tồn tại. Ngược lại thì nó trả về FALSE. Nếu muốn hiện thông báo thì bạn cho 1 vòng For duyệt qua cuối cùng cho hiện thông báo là xong.

TDN
 
Upvote 0
Ghi lên file có tên là 'CodeVBA'

Trong thư mục 'D:\DuLieu'
Tên file đặt sẵn là File_1, File_2,.. . . . (Bạn có thể sửa lại cho phù hợp)

Mã:
Option Explicit

[B]Sub FileNames()[/B]
' Reduce By Sa_DQ in GPE.COM'

On Error GoTo Loi_FN
 Application.ScreenUpdating = False
 
Dim jZ As Byte, Ij As Byte
Dim Path As String, dir As String

Dim RowSN(1 To 32) As String

1 dir = "d:\dulieu\" ''
  For jZ = 1 To 32
3    Path = dir & "file_" & Format(jZ, "") & ".xls"
    Workbooks.Open Filename:=Path
5    RowSN(jZ) = Path
    ActiveWorkbook.Close SaveChanges:=True
7 Next jZ
 
DenDay:
 
9 Sheets("Sheet1").Select
 Cells(1, 1) = "Tong so file la: " & jZ
11 Range("A2:A33").ClearContents
 For Ij = 1 To jZ
13    Cells(Ij + 1, 1) = RowSN(Ij)
 Next Ij
 
15 Application.ScreenUpdating = True
 If Err.Number > 0 Then Exit Sub
17 Workbooks("codeVBA").Close SaveChanges:=True

Err_FN:             Exit Sub
Loi_FN:
 Select Case Err
 Case 1004
    GoTo DenDay
 Case Else
    MsgBox Error$, , Erl & " " & Err:       Resume Err_FN
 End Select
[B]End Sub[/B]
 
Lần chỉnh sửa cuối:
Upvote 0
Trong thư mục 'D:\DuLieu'
Tên file đặt sẵn là File_1, File_2,.. . . . (Bạn có thể sửa lại cho phù hợp)

Mã:
Option Explicit
 
[B]Sub FileNames()[/B]
' Reduce By Sa_DQ in GPE.COM'
 
On Error GoTo Loi_FN
 Application.ScreenUpdating = False
 
Dim jZ As Byte, Ij As Byte
Dim Path As String, dir As String
 
Dim RowSN(1 To 32) As String
 
 dir = "d:\dulieu\" ''
 For jZ = 1 To 32
    Path = dir & "file_" & Format(jZ, "") & ".xls"
    Workbooks.Open Filename:=Path
    RowSN(jZ) = Path
    ActiveWorkbook.Close SaveChanges:=True
 Next jZ
 
DenDay:
 
 Sheets("Sheet1").Select
 Cells(1, 1) = "Tong so file la: " & jZ
 Range("A2:A33").ClearContents
 For Ij = 1 To jZ
    Cells(Ij + 1, 1) = RowSN(Ij)
 Next Ij
 
 Application.ScreenUpdating = True
 If Err.Number > 0 Then Exit Sub
 Workbooks("codeVBA").Close SaveChanges:=True
 
Err_FN:             Exit Sub
Loi_FN:
 Select Case Err
 Case 1004
    GoTo DenDay
 Case Else
    MsgBox Error$, , Erl & " " & Err:       Resume Err_FN
 End Select
[B]End Sub[/B]
Cảm ơn bạn nhiều nhưng minh chưa hiểu sử dụng nó như thế nào. Bạn có thể hướng dẫn qua được không. Minh chưa thạo VB lắm.
 
Upvote 0
Bạn có thể làm theo hướng sau : Bạn dùng hàm FileExits() để kiểm tra sự tồn tại của File trong thư mục.
PHP:
Function FileExists(ByVal FName) As Boolean
' Tra ve True neu file ton tai
' fname la duong dan bao gom luon ten tap tin
Dim x As String
    On Error GoTo TBLoiPath
    x = Dir(FName)
    If x <> "" Then FileExists = True Else FileExists = False
    Exit Function
TBLoiPath:
    FileExists = False
End Function
Như vậy bạn sẽ liệt kê tên 30 file vào 1 cột A của Sheet và cột B bạn nhập công thức FileExits(Path\FileName) Như vậy, Kết quả trả về là TRUE thì file đó tồn tại. Ngược lại thì nó trả về FALSE. Nếu muốn hiện thông báo thì bạn cho 1 vòng For duyệt qua cuối cùng cho hiện thông báo là xong.

TDN
Cảm ơn bạn. Ý mình là khi mình mở file tổng hợp này thì nó tự kiểm tra các tệp theo như minh dưa vào từ trước, nếu những tệp nào chưa có thì hiện lên tên các tệp còn thiếu trong một MssBox
Minh cũng thử như sau nhưng nó chạy không ổn định có khi thì báo đúng có khi báo sai. Các bạn xem giúp với.
Mã:
'Hàm kiem tra su ton tai cua File
Private Function FileExists(fname) As Boolean
Dim x As String
x = Dir(fname)
'MsgBox "tep " & x
If x <> "" Then FileExists = True _
Else FileExists = False
End Function
Mã:
Sub Auto_Open()
Dim tg As String
Dim Tr(26)
Tr(1) = "Van Ly.xls"
Tr(2) = "Hop Ly.xls"
Tr(3) = "Chinh Ly.xls"
Tr(4) = "Cong Ly.xls"
Tr(5) = "Nguyen Ly.xls"
Tr(6) = "Duc Ly.xls"
Tr(7) = "Dong Ly.xls"
Tr(8) = "Vinh Tru.xls"
Tr(9) = "Nhan Khang.xls"
Tr(10) = "Nhan Chinh.xls"
Tr(11) = "Nhan Nghia.xls"
Tr(12) = "Nhan Binh.xls"
Tr(13) = "Xuan Khe.xls"
Tr(14) = "Nhan My.xls"
Tr(15) = "Tien Thang.xls"
Tr(16) = "Nhan Hau.xls"
Tr(17) = "Nhan Hau.xls"
Tr(18) = "Nhan Phu.xls"
Tr(19) = "Nhan Phuc.xls"
Tr(20) = "Nhan Thinh.xls"
Tr(21) = "Nhan Hung.xls"
Tr(22) = "Nhan Dao.xls"
Tr(23) = "Dao Ly.xls"
Tr(24) = "Chan Ly.xls"
Tr(25) = "Bac Ly.xls"
Tr(26) = "Nam Cao.xls"
tg = ""
For i = 1 To 26
    ten = Tr(i)
    If FileExists(ten) = False Then
      tg = tg & Left(ten, Len(ten) - 4) & ". "
    End If
Next
If tg <> "" Then
    MsgBox "Chua co tep " & tg
End If
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Nhưng chưa hiểu sử dụng nó như thế nào. Bạn có thể hướng dẫn qua được không. Minh chưa thạo VB lắm.
Ghi chú: Mình vừa đánh số các dòng lệnh bên trên, để giải thích rõ & dễ hơn.
Dòng 1: Nó nói rằng thư mục mà ta đang quản lý có tên là "DuLieu", tại ổ đĩa D:
Bạn sửa lại cho phù hợp với bạn; Nếu bạn sửa không xong thì bạn phải nói bạn muốn quản lý các file excel trong thư mục nào; Sẽ có người giúp bạn sửa;

Dòng 3: Ở đây ta ví dụ các files của bạn có tên là:
File_1, File_2, File_3 , . . .
Nếu các file của bạn có tên lộn xộn thì khó dùng vòng lặp lắm;
Bạn nên đặt tên như trên, hay có dạng sau
Ng01, Ng02, Ng03,. . . ., Ng31

Bạn chép đoạn mã này vô workbook, mà nó quản lý các file excel khác trong thư mục;
Nếu file của bạn có tên là 'QLyFiles' thì bạn đổi dòng lệnh 17 lại. (Hiện nó đang có tên: 'CodeVBA'

Có hai cách chạy macro:
1*/ Như bạn iêu cầu: Cần đổi tên macro này thành Auto_Open()
Để mỗi lần mở nó; kết quả của đoạn code sẽ thể hiện tại sheet có tên cúng cơm là Sheet1
2*/ Tiện hơn bạn giữ tên như cũ & gán cho nó 1 tổ hợp phím để chạy (hay có thể gán nó vô nút lệnh- Để khi ta sướng thì ấn 1 cái)

Chúc vui!
 
Upvote 0
@ To Titanic20072007
Bạn tải ví dụ sau về chạy file Main.xls
Bạn xem code và có thể thay đổi lại cho phù hợp với yêu cầu của bạn.

TDN
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom