Mã mở file vào ngày gần nhất (1 người xem)

Liên hệ QC

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

Nguyễn Xuân Sơn

Thành viên thường trực
Tham gia
23/4/07
Bài viết
343
Được thích
219
Chào Các bạn!
Mình có một thư mục BAO_CAO_SO_LIEU_NGAY. Ở thư mục này là các files số liệu hoạt động của đơn vị theo ngày, cứ sáng hôm nay thì có file số liệu đẩy về của ngày hôm trước. Tuy nhiên đôi khi file hôm trước chưa có ngay mà phải một vài ngày sau nó mới đẩy về. VD từ 27/08/2008 đến 06/09/2008 có các files như sau: BCDT27082008-200; BCDT28082008-200; BCDT30082008-200;BCDT02092008-200; BCDT04092008-200; BCDT06092008-200. Trong đó BCDT là mã B/cáo, 200 là mã đơn vị, còn tám số giữa lần lượt là ngày; tháng; năm tạo báo cáo ( số liệu của ngày đó ).
Tại file MẪU ( Template ), tôi muốn tạo một nút lệnh chạy Macro trong đó có mã gọi file báo cáo ngày hôm trước và quan trọng hơn ( khó giải quyết hơn ) là nếu báo cáo ngày hôm trước không có thì nó sẽ gọi file báo cáo của ngày gần nhất - kể cả đứng ở ngày đầu tháng mà ngày gần nhất là những ngày sát cuối tháng trước như VD ở trên. Vậy có thể viết được đoạn mã gọi file như kể trên không, nếu được nhờ các bạn cùng giải quyết giúp tôi nhé.
Cảm ơn các bạn!
 
Lần chỉnh sửa cuối:
Trong khi chờ đợi, bạn dùng tạm cái ni:

Bạn chú ý sửa lại các chuỗi trong macro cho đúng tên các fíle của bạn
Như "BAO_CAO_SO_LIEU_NGAY" thay vô chổ: "D:\DuLieu\"
. . . . .

PHP:
Sub OpenOldWorkBook()
 Const Dir As String = "D:\DuLieu\BCDT"
 Dim Path As String
 Dim wF As Byte:                       Dim Dat As Date
 For wF = 1 To 9
   Dat = Date - wF
   Path = Right("0" & CStr(Month(Dat)), 2) & Right(CStr(Year(Dat)), 2)
   Path = Dir & Right("0" & CStr(Day(Dat)), 2) & Path & "200.xls"
   On Error GoTo 2309
   Workbooks.Open Filename:=Path
   Exit For
2309
 Next wF
End Sub
 
Bạn chú ý sửa lại các chuỗi trong macro cho đúng tên các fíle của bạn
Như "BAO_CAO_SO_LIEU_NGAY" thay vô chổ: "D:\DuLieu\"
. . . . .

PHP:
Sub OpenOldWorkBook()
 Const Dir As String = "D:\DuLieu\BCDT"
 Dim Path As String
 Dim wF As Byte:                       Dim Dat As Date
 For wF = 1 To 9
   Dat = Date - wF
   Path = Right("0" & CStr(Month(Dat)), 2) & Right(CStr(Year(Dat)), 2)
   Path = Dir & Right("0" & CStr(Day(Dat)), 2) & Path & "200.xls"
   On Error GoTo 2309
   Workbooks.Open Filename:=Path
   Exit For
2309
 Next wF
End Sub
Kính gửi: Bạn ChanhTQ@ cùng các bạn trên 4R!
Mình đã lập một macro như mã của bạn ChanhTQ@ gửi nhưng macro không chạy được và không hiểu lắm về nội dung mã bạn gửi nên cũng không sửa được.
Mình gửi thư mục và các files kèm theo. Trong đó có 04 files các ngày giả định là 28/08/2008; 29/08/2008; 02/09/2008; 05/09/2008.
Mình xin trình bày ý tưởng của mình cụ thể một lần nữa như sau:
Giả sử mình đứng ở ngày 06/09/2008, cho chạy Macro để gọi file vào ngày gần nhất là ngày 05/09/2008 sẽ được mở; hoặc nếu ngày 05/09/2008 lại không có file trong thư mục nó sẽ gọi mở file gần nhất khi đó là ngày 02/09/2008; hoặc tình huống nữa là file ngày 02/09/2008 cũng không có nó sẽ gọi mở file gần nhất trong trường hợp này là ngày 29/08/2008 .... .
Vậy xin bạn ChanhTQ@ và các bạn giúp đỡ giải quyết hộ.
Xin cảm ơn các bạn!
 

File đính kèm

Bạn chạy thử code này:
Mã:
Option Explicit
Sub MoFile_GanNhat()
Dim MyPath As String, wbName As String, ngay As String, thang As String 
Dim Maxday As String, wbNameToDay as String
On Error Resume Next
MyPath = ThisWorkbook.Path
If Len(Day(Date)) = 1 Then
ngay = "0" & Day(Date)
Else
ngay = Day(Date)
End If
If Len(Month(Date)) = 1 Then
thang = "0" & Month(Date)
Else
thang = Month(Date)
End If
wbNameToDay = "BCDT" & ngay & thang & Year(Date) & "-200.xls"
wbName = Dir(MyPath & "\" & "*.xls")
Application.ScreenUpdating = False
While wbName <> ""
    If wbName <> "Template.xls" And wbName <> wbNameToDay Then
         wbName = Val(Mid(wbName, 9, 4) & Mid(wbName, 7, 2) & Mid(wbName, 5, 2))
              If Maxday = "" Then
                   Maxday = wbName
              ElseIf Maxday < wbName Then
                   Maxday = wbName
             End If
    End If
        wbName = Dir
 Wend
 wbName = "BCDT" & Mid(Maxday, 7, 2) & Mid(Maxday, 5, 2) & Mid(Maxday, 1, 4) & "-200.xls"
 Workbooks.Open MyPath & "\" & wbName
Application.ScreenUpdating = True
End Sub
 

File đính kèm

To Nguyen Xuan Son: Bạn thêm dấu '-' vô trước ký số 200 trong chuỗi "200.xls" chưa vậy?
Mà mình viết không phải cho E2007 đâu đó nha!
Mình đã thử & OK mới gởi lên mà!
 
Lần chỉnh sửa cuối:
Kính gửi: Bạn ChanhTQ@!
Mình đã lập một macro như mã của bạn và có cả dấu '-' vô trước ký số 200 trong chuỗi "200.xls", máy tính của mình dùng E2003 ( XP ). Nhưng khi chạy vẫn bị lỗi dòng: Const Dir As String = "D:\BAOCAOTINHHINHKDNGAY\BCDT" có nghĩa là nó chạy đến đó đã bị sự cố rồi phải không bạn. Hay là bạn port files thử của bạn lên cho mình tham khảo với.
Mình đã tải gói BAOCAOTINHHINHKDNGAY1.rar của bạn VODA rồi nó chạy đúng như ý. Rất cảm ơn bạn. Tuy nhiên mình có một cái mắc nữa nhờ bạn giải quyết giúp mình nhé: Nếu cứ để các file hàng ngày trong thư mục BAOCAOTINHHINHKDNGAY thì quả thật là không khoa học. Do vậy đúng ra thì việc sắp xếp nó phải là phân ra các thư mục con theo từng tháng rồi thư mục cả năm nữa, với yêu cầu cũng như phần trình bày trước của mình có cả đứng ở đầu tháng này lấy file gần nhất của tháng trước hoặc năm trước.
Vì vấn đề này nằm ngoài khả năng của mình. Vậy nhờ bạn và các bạn cố gắng giúp mình nhé!
Xin Cảm ơn Bạn và các bạn!
 
Nguyên văn bởi Nguyễn Xuân Sơn
Tuy nhiên mình có một cái mắc nữa nhờ bạn giải quyết giúp mình nhé: Nếu cứ để các file hàng ngày trong thư mục BAOCAOTINHHINHKDNGAY thì quả thật là không khoa học. Do vậy đúng ra thì việc sắp xếp nó phải là phân ra các thư mục con theo từng tháng rồi thư mục cả năm nữa, với yêu cầu cũng như phần trình bày trước của mình có cả đứng ở đầu tháng này lấy file gần nhất của tháng trước hoặc năm trước.
Vì vấn đề này nằm ngoài khả năng của mình. Vậy nhờ bạn và các bạn cố gắng giúp mình nhé!
Thú thật mình chưa hiểu hết yêu cầu của bạn.
-Bạn muốn phân loại và tách các file ra từng thư mục con theo ngày tháng?
-Hay là bạn đã tách ra rồi? Nếu đã tách ra rồi thì làm gì nữa?
-Code của mình giúp mở 1 file ,không phải của hôm nay và là file gần nhất trong quá khứ. ví dụ đứng ở đầu tháng này sẽ mở được file gần nhất của tháng trước với điều kiện là tháng này chưa có file nào của ngày hôm qua.
Bạn hãy nói rõ thêm về yêu cầu của bạn. Có file mẫu thì càng tốt.
 
Kính gửi: Bạn ChanhTQ@!
Mình đã lập một macro như mã của bạn và có cả dấu '-' vô trước ký số 200 trong chuỗi "200.xls", máy tính của mình dùng E2003 ( XP ). Nhưng khi chạy vẫn bị lỗi dòng: Const Dir As String = "D:\BAOCAOTINHHINHKDNGAY\BCDT" có nghĩa là nó chạy đến đó đã bị sự cố rồi phải không bạn. Hay là bạn port files thử của bạn lên cho mình tham khảo với!
Nếu báo lỗi dòng lệnh này, thì máy bạn có vấn đề rồi, có thể office của bạn cần cài lại hay sửa lỗi trong khai báo reference . . .
Bạn thử dòng lệnh này xem sao:
Dim StrC As String
StrC = CStr(9) 'Nếu báo lỗi thì đúng bệnh nặng rồi đó!' :-=
 
Web KT

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

Back
Top Bottom