Xác định thời gian lưu trữ sau cùng của file hiện hành

Liên hệ QC

tungson_mrcc

Thành viên hoạt động
Tham gia
25/4/07
Bài viết
108
Được thích
72
Nhờ các bác chỉ giúp vấn đề sau:
Làm sao xác định được thời gian lưu trữ sau cùng của file hiện hành.
Giả sử, tôi có file a.xls. Trong cửa sổ Windows Explorer, Khi di chuột trên file tôi có thông tin về file như sau " .... Date Modified 1/24/2010 10:00 AM ....". Sau khi đang mở file a.xls, có hàm nào cho phép lấy lại các thông tin này không?

Tôi đã thử với hàm filedatetime(), như sau: filedatetime(activeworkbook.FullName).
Nhưng kết quả là thời gian mở file lần cuối cùng chứ không phải là thời gian lưu trữ sau cùng của file (1/24/2010 10:00 AM )

Trân trọng

Rất mong được sự quan tâm của các cao thủ.
Vấn đề là ở chỗ đa phần các chương trình của chúng ta đều sử dụng ngày giờ hệ thống làm cơ sở để tính toán. Khi đồng hồ hệ thống sai thì phần mềm sẽ cập nhật sai thời gian v.v...
Tôi nảy ra ý này nhằm kiểm tra đồng hồ hệ thống trước khi chạy chương trình. Nếu phát hiện sai lệch giữa thời gian lưu file lần cuối cùng và thời điểm hiện tại thì cảnh báo để chúng ta có thể điều chỉnh lại đồng hồ hệ thống.
Câu lệnh tôi định sử dụng là " if filedatetime(activeworkbook.fullname) > now() then ...."
Thế nhưng hàm filedatetime() lại cho kết quả không như mong muốn.
Mong các cao thủ chỉ giúp.
Trân trọng.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Nhờ các bác chỉ giúp vấn đề sau:
Làm sao xác định được thời gian lưu trữ sau cùng của file hiện hành.
Giả sử, tôi có file a.xls. Trong cửa sổ Windows Explorer, Khi di chuột trên file tôi có thông tin về file như sau " .... Date Modified 1/24/2010 10:00 AM ....". Sau khi đang mở file a.xls, có hàm nào cho phép lấy lại các thông tin này không?

Tôi đã thử với hàm filedatetime(), như sau: filedatetime(activeworkbook.FullName).
Nhưng kết quả là thời gian mở file lần cuối cùng chứ không phải là thời gian lưu trữ sau cùng của file (1/24/2010 10:00 AM )

Trân trọng
Bạn dùng code sau thử nhé:
Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    With Sheets("sheet1")
        If .Range("a1") > Now() Then
            MsgBox "Ban nen kiem tra lai gio cua may"
        Else
            .Range("A1").Value = Now()
        End If
    End With
End Sub

Bạn tham khảo thêm file đính kèm coi có đ1ng ý chưa nhe
 

File đính kèm

  • gio.xls
    21 KB · Đọc: 55
cám ơn bạn doomfootwear đã quan tâm tới vấn đề của mình. Bạn hiểu gần đúng vấn đề mình đưa ra. Tuy nhiên mình muốn là giá trị trong ô "A1" phải là thời điểm lưu file sau cùng cơ, đồng thời thủ tục này phải chạy ngay khi mở file (WorkBook_Open).
Bạn xem file đính kèm nhé.
Trân trọng.
 

File đính kèm

  • TimeCheck.xls
    22.5 KB · Đọc: 20
  • Minh hoa.doc
    59.5 KB · Đọc: 12
cám ơn bạn doomfootwear đã quan tâm tới vấn đề của mình. Bạn hiểu gần đúng vấn đề mình đưa ra. Tuy nhiên mình muốn là giá trị trong ô "A1" phải là thời điểm lưu file sau cùng cơ, đồng thời thủ tục này phải chạy ngay khi mở file (WorkBook_Open).
Bạn xem file đính kèm nhé.
Trân trọng.

Bạn thêm đoạn sau vào nhé.

Mã:
Sub auto_open()
Dim fso, FileName, GetAName, MySt
FileName = ActiveWorkbook.FullName
Set fso = CreateObject("Scripting.FileSystemObject") ' Origin code
Set GetAName = fso.GetFile(FileName)
'Ngày tao, ngày sua, ngay truy nhâp file cuôi cùng
'    Set GetAName = fso.GetFile("C:\windows\system32\Cmd.exe")   ' Origin code
  [COLOR=red] [B]If GetAName.DateLastModified > Now Then[/B][/COLOR]
[B][COLOR=red]      MsgBox "Ban phai xem lai ngay va gio tren may"[/COLOR][/B]
[B][COLOR=red]  Else[/COLOR][/B]
       'Modified by TungSon
        MySt = "DateCreated:" & GetAName.DateCreated
        MySt = MySt & vbCrLf & "By DateLastModified: " & GetAName.DateLastModified
        MySt = MySt & vbCrLf & "By FileDateTime: " & FileDateTime(FileName)    'Added by TungSon
        MySt = MySt & vbCrLf & "DateLastAccessed: " & GetAName.DateLastAccessed
        MySt = MySt & vbCrLf & "Now: " & Now()
        MsgBox MySt
    [B][COLOR=red]End If[/COLOR][/B]
End Sub

Mo72i bạn xem thêm file nhe
 

File đính kèm

  • TimeCheck.xls
    24.5 KB · Đọc: 27
Gủi bạn DoomFootWear
Dựa theo ý của bạn mình sửa lại doan code như sau thì thấy có vẻ ưng ý hơn

Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Sheets("sheet1")
If .Range("a1") > Now() Then
MsgBox "Ban nen kiem tra lai gio cua may"
Else
.Range("A1").Value = Now()
End If
End With
End Sub
Private Sub Workbook_Open()
With Sheets("sheet1")
If .Range("a1") > Now() Then
MsgBox "Ban nen kiem tra lai gio cua may"
End If
End With
End Sub

(Bạn xem file đính kèm nhé)

Tuy nhiên phải dùng tới 2 Sub thấy loằng ngoằng quá.
Theo mình hiểu thì khi đóng file, nếu chọn nút "NO" trong hộp thoại "Do you want to save..." thì LastModifiedDate vẫn giữ nguyên không thay đổi, Có cách nào lấy được giá trị LastModifiedDate mà máy đang lưu để xử lý thì thật tuyệt. Vừa không phải dùng tới ô "A1", mà giải thuật cũng gọn hơn rất nhiều.

Trân trọng.

GetAName.DateLastModified FileDateTime(FileName) đều cho kết quả như nhau mà !??????
 

File đính kèm

  • CheckSavedTime.xls
    22 KB · Đọc: 27
Chỉnh sửa lần cuối bởi điều hành viên:
Gủi bạn DoomFootWear
Dựa theo ý của bạn mình sửa lại doan code như sau thì thấy có vẻ ưng ý hơn

Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Sheets("sheet1")
If .Range("a1") > Now() Then
MsgBox "Ban nen kiem tra lai gio cua may"
Else
.Range("A1").Value = Now()
End If
End With
End Sub
Private Sub Workbook_Open()
With Sheets("sheet1")
If .Range("a1") > Now() Then
MsgBox "Ban nen kiem tra lai gio cua may"
End If
End With
End Sub

(Bạn xem file đính kèm nhé)

Tuy nhiên phải dùng tới 2 Sub thấy loằng ngoằng quá.
Theo mình hiểu thì khi đóng file, nếu chọn nút "NO" trong hộp thoại "Do you want to save..." thì LastModifiedDate vẫn giữ nguyên không thay đổi, Có cách nào lấy được giá trị LastModifiedDate mà máy đang lưu để xử lý thì thật tuyệt. Vừa không phải dùng tới ô "A1", mà giải thuật cũng gọn hơn rất nhiều.

Trân trọng.

GetAName.DateLastModified FileDateTime(FileName) đều cho kết quả như nhau mà !??????
Bạn dùng NOW làm sao mà ra kết quả được
Bản thân 1 workbook đã có thuộc tính BuiltinDocumentProperties ---> Cứ thế mà xài thôi
PHP:
Sub GetLastModified()
  MsgBox ThisWorkbook.BuiltinDocumentProperties("Last Save Time")
End Sub
 
Cảm ơn Bác NDU96081631, đúng là ý của tớ rồi đấy.
Muốn load file đã sửa lại, rất hoàn chỉnh, rất đẹp nhưng không được.
Sao tôi kích nút trả lời thì lại phải đăng nhập lại. Nếu lần sau Upload được thì tôi sẽ gủi file đã hoàn chỉnh.
Một lần nữa, cám ơn các bạn NDU96081631, DoomFootWear, HoangDanh282vn đã quan tâm trả lòi giúp tớ.
Vấn đề đã được giải quyết.

Trân trọng.
 
Mình Upload file đã hiệu chỉnh theo gợi ý của các bạn.

Trân trọng
 

File đính kèm

  • CheckSavedTime_OK.xls
    25 KB · Đọc: 42
  • CheckSavedTime_ThamKhao.xls
    27 KB · Đọc: 23
Từ gợi ý của bạn NDU96081631, mình đã tìm được bản hướng dẫn trong phần Help của VB. Xin mạnh dạn dịch ra để chúng ta cùng tham khảo.
Ngoài ra, Mình cũng thử áp dụng như trong file CheckSavedTime_OK.xls được đính kèm.
Mong các bạn chỉ giáo thêm.
Trân trọng

1. Thuộc tính ThisWorkbook trả về tập tin (workbook) có chứa các mã lệnh VB đang được thực hiện.
2. Đối tượng chứa các thuộc tính của tập tin DocumentProperties Collection Objectđược định nghĩa là một tập hợp các đối tượng (mang) thuộc tính của tập tin (DocumentProperty). Mỗi một thuộc tính của tập tin sẽ đại diện cho một tính chất có sẵn (Buit-in Property) hoặc một tính chất (được) khai báo (Custom Property) của tập tin chứa (container document).
Cách sử dụng tập hợp các thuộc tính của tập tin (DocumentProperties Collection)

Hãy sử dụng phương thức Add để khai báo và bổ sung một tính chất mới (custom property) vào tập hợp các thuộc tính của tập tin. (Tuy nhiên) Bạn không thể sử dụng phương thức Add để tạo (can thiệp vào) một tính chất có sẵn tập tin.

Để nhận được một đối tượng thuộc tính của tậo tin (DocumentProperty Object), hiển thị một tính chất có sẵn của tập tin (built-in document property), ta dùng cấu trúc BuiltinDocumentProperties(index), trong đó index là số chỉ mục (số thứ tự) của (các) tính chất có sẵn của tập tin.

Để nhận được một đối tượng thuộc tính của tậo tin (DocumentProperty Object), hiển thị một tính chất khai báo của tập tin (custom document property), ta dùng cấu trúc CustomDocumentProperties(index), trong đó index là số chỉ mục (số thứ tự) của (các) tính chất được khai báo (bổ sung) của tập tin.

3. Thuộc tính BuiltinDocumentProperties
- Được định nghĩa là sẽ trả về một tập hợp các tính chất có sẵn của tập tin.
- BuiltinDocumentProperties là một thuộc tính chỉ đọc (read only).
Lưu ý:
Thuộc tính này trả về toàn bộ tập hợp các tính chất có sẵn của tập tin. Hãy sử dụng phương thức Item để trả về một phần tử đơn lẻ trong tập này bằng cách nêu rõ tên của tính chất hoặc số chỉ mục của tính chất.
Bạn có thể tham chiếu tới các tính chất của tập tin theo tên gọi hoặc theo số chỉ mục. Bảng sau đây liệt kê tên gọi các tính chất có sẵn của một tập tin

Title
Subject
Author
Keywords
Comments
Template
Last Author
Revision Number
Application Name
Last Print Date
Creation Date
Last Save Time
Total Editing Time
Number of Pages
Number of Words
Number of Characters
Security
Category
Format
Manager
Company
Number of Bytes
Number of Lines
Number of Paragraphs
Number of Slides
Number of Notes
Number of Hidden Slides
Number of Multimedia Clips
Hyperlink Base
Number of Characters (with spaces)


Đối tượng chứa ứng dụng không đòi hỏi phải xác nhận (define) giá trị của tất cả các tính chất có sẵn của một tập tin. Nếu Microsoft Excel không xác nhận giá trị của một trong các tính chất có sẵn của tập tin, thì việc đọc thuộc tính Value của tính chất đó sẽ gây ra lỗi (trong chương trình).

Vì phương thức Item là phương thức mặc định của tập hợp DocumentProperties, nên các câu lênh sau đây là như nhau:

BuiltinDocumentProperties.Item(1)
BuiltinDocumentProperties(1)

Để tham chiếu tới các tính chất khai báo (bổ sung) của tập tin, hãy sử dụng thuộc tính CustomDocumentProperties.

4. Ví dụ: ví dụ này sẽ hiển thị tên gọi của các tính chất có sẵn của tập tin trong một danh sách tại Sheet1
-
PHP:
Public Sub DisplayBuitinProperties()
On Error Resume Next
rw = 3
Worksheets(1).Activate
For Each p In ActiveWorkbook.BuiltinDocumentProperties
Cells(rw, 1).Value = p.Name
Cells(rw, 2).Value = p.Value
rw = rw + 1
Next
End Sub
 
Private Sub CommandButton1_Click()
DisplayBuitinProperties
End Sub
 

File đính kèm

  • CheckSavedTime_OK.xls
    32.5 KB · Đọc: 49
  • BuiltinDocumentPorperties instruction _ English to Vietnam.doc
    47 KB · Đọc: 41
Lần chỉnh sửa cuối:
Em chào các anh
Em đọc chủ đề này thấy rất hay. Hiện nay công việc của em là kiểm tra xem file báo giá của công ty xem trong tuần có những báo giá nào mới. Thường thì báo giá của công ty em được lưu ở nhiều Folder khác nhau (có nhiều người cùng nhập báo giá, mối folder liên quan đến một dòng sản phẩm) vì thế rất khó kiểm soát. Nên em định nhờ các anh các chị chỉ dùm em cách làm sao để biết được có những báo giá nào mới lưu trong tuần trong (Folder tổng gồm nhiều Folder con đó). Hiện nay em đã có cách lọc ra danh sách tất cả các file với đường dẫn (kể cả trong Sub Folder). Nếu anh chị nào có công thức hiển thị thông tin lưu file lần cuối của đường dẫn thì em cảm ơn ạ.
Ví dụ:
Ô A1 có đường dẫn là C:\Bao_gia\C180K\29U-2178.xls
Em cần công thức ở ô B1 tham chiếu vào A1 để biết file đó lưu lần cuối cùng vào ngày nào
Rồi sau đó em lọc lấy những khoảng thời gian trong tuần để biết có bao nhiêu xe vào xưởng ạ.
 
Web KT
Back
Top Bottom