Share Add-In "Tự động mở File Excel và thông báo ngày đến hạn"!

Liên hệ QC

Hong.Van

Busy
Tham gia
7/5/12
Bài viết
2,330
Được thích
1,763
Em xin chia sẻ Add-In "Tự động mở File Excel và thông báo ngày đến hạn"! như sau:
I/ Chép file "DenHan" vào thư mục D:\Tam\DenHan.xls . File "ThongBaoDenHan" lưu ở đâu cũng được

II/ File "DenHạn", sheet Y
1/ Nếu cột D5:D1000 có cell ngày/tháng/năm thỏa điều kiện:
Trước ngày hiện hành (ngày hệ thống máy tính) 2 ngày, hay 1 ngày, hoặc bằng ngày hiện hành hoặc sau 1 ngày hiện hành. Thì khi ta mở File "ThongBaoDenHan" thì sẽ tự động kích họat File "DenHan" và sẽ hiện thông báo đồng thời tô màu chữ !
Trường hợp không có cell nào thỏa điều kiện nói trên thì File "DenHạn" tự đóng
Nếu chúng ta không muốn nó hiện thông báo nữa thì ta chọn chữ R ở cột E của dòng tương ứng
2/ Với các ngày kỷ niệm hàng năm thì ta nhập ngày tại C6:C18, cthức sẽ tính ở cột D của dòng tương ứng
3/ Còn các ngày khác thì ta nhập trực tiếp từ D19 trở xuống

III/ Các bạn có thể tạo File "ThongBaoDenHan" thành Add-In. Như vậy mỗi khi mở Excel lên thì nếu thỏa điều kiện nói trên thì sẽ tự động kích họat File "DenHan" và sẽ hiện thông báo!
----------------
P/s:Các Thầy cô & anh chị đóng góp ý kiến để File trên hữu dụng hơn!
- File này được bắt nguồn từ đây http://www.giaiphapexcel.com/forum/...âp-trình-tự-động-mở-file-theo-thời-gian/page2
- Đã thử nghiệm chạy tốt trên Excel 2003 và 2010
Xin Cảm ơn!

Code chính
Mã:
Sub Auto_Open()
    Dim Today As Long, Tmparr, Item, tmp
    Dim chk As Boolean, FileName$
    Dim i, Arr(), Text As String, Text1 As String, Text2 As String, Text3 As String
    Text = "CO2N 2 NGA2Y LA2 D9E61N: "
    Text1 = "CO2N 1 NGA2Y LA2 D9E61N: "
    Text2 = "HO6M NAY LA2: "
    Text3 = "D9A4 QUA 1 NGA2Y: "
    Debug.Print chk


    Today = Date
    FileName = "D:\Tam\DenHan.xls"
    With CreateObject("Scripting.FileSystemObject")
        Workbooks.Open "D:\Tam\DenHan.xls"
        If .FileExists("D:\Tam\DenHan.xls") Then
            With Application
                .ScreenUpdating = 0
                .DisplayAlerts = 0
                .Workbooks.Open FileName
            End With
            Tmparr = Sheets("Y").Range("D5:D1000").Value
            Sheets("Y").Range("B5:B1000").Font.ColorIndex = 1
            For Each Item In Tmparr
                If Len(Item) Then
                    tmp = CDate(Format(Item, "dd/mm/yyyy"))
                    If Today - tmp >= -2 And Today - tmp <= 1 Then chk = True


                End If
            Next
            If chk Then
                With Sheets("Y")


                    Arr = Range([D5], [D65536].End(3)).Resize(, 2)
                    For i = 1 To UBound(Arr)
                        If Arr(i, 1) <> "" And Arr(i, 2) = "" Then
                            If Today - Arr(i, 1) = -2 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text, "VNI") & Cells(i + 4, 2).Value, , "THÔNG BÁO by H.V", vbOKOnly
                                Cells(i + 4, 2).Font.ColorIndex = 3


                            End If
                            If Today - Arr(i, 1) = -1 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text1, "VNI") & Cells(i + 4, 2).Value, , "THÔNG BÁO by H.V", vbOKOnly
                                Cells(i + 4, 2).Font.ColorIndex = 7


                            End If
                            If Today - Arr(i, 1) = 0 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text2, "VNI") & Cells(i + 4, 2).Value, , "THÔNG BÁO by H.V", vbOKOnly
                                Cells(i + 4, 2).Font.ColorIndex = 5


                            End If
                            If Today - Arr(i, 1) = 1 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text3, "VNI") & Cells(i + 4, 2).Value, , "THÔNG BÁO by H.V", vbOKOnly
                                Cells(i + 4, 2).Font.ColorIndex = 50
                            End If
                        End If
                    Next
                End With
            Else
                Workbooks("DenHan.xls").Close
            End If
        End If
    End With
    With Application
        .ScreenUpdating = 1
        .DisplayAlerts = 1
    End With
End Sub
 

File đính kèm

  • DenHan.xls
    62 KB · Đọc: 979
  • ThongBaoDenHan.xls
    46.5 KB · Đọc: 885
Sao tui mở file thongbaodenhan lên mà sao file DenHan nó không mở lên vậy bạn? Tui đã sửa ngày lại cho nó sau ngày hiện hành của máy là 1 ngày, 2 ngày và trùng ngày cũng không được. mong bạn chỉ giáo
 
Upvote 0
Em chào Thầy và các anh/chị,

Em đang cần tìm một giải pháp để giải quyết việc mở file và thông báo khi đến ngày đã định. Em tìm trên GPE được một vài topic khác nữa nhưng đây chính là topic mà em cần.

Em cảm ơn anh Hong.Van nhiều lắm ạ.

Em có một số vấn đề cần Thầy và các anh/chị giúp để hoàn thiện yêu cầu của công việc ạ,

Em có nhiều file excel trong cùng 1 folder. Mỗi file có nhiều sheet (9 sheet khác nhau), trong mỗi sheet lại có 1 colum chứa thông tin thời gian cần thông báo khi đến hạn như trong file demo mà anh Hong.Van đưa ra.
Em muốn là chỉ cần mở file ThongBaoDenHan.xls thì nếu trong các file mà có sheet nào có ngày tháng đến hạn sẽ tự động bật lên. Ví dụ có 3 file trong tổng số 15 files có cột đến hạn thì cả 3 file cùng bật lên . Và tất nhiên là có kèm đánh dấu theo màu chữ như trong file DenHan.xls của anh Hong.Van . Em rất ấn tượng với cách đánh dấu theo màu chữ của anh Hong.Van , như thế sẽ biết được còn bao nhiêu ngày nữa là đến hạn rồi. (màu ĐEN từ 8 ngày trở lên, màu Xanh từ 4 - 7 ngày ....)

Em cảm ơn ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
cái này thể nhập 2 file thành 1 được à bạn
 
Upvote 0
Em xin chia sẻ Add-In "Tự động mở File Excel và thông báo ngày đến hạn"! như sau:
I/ Chép file "DenHan" vào thư mục D:\Tam\DenHan.xls . File "ThongBaoDenHan" lưu ở đâu cũng được

II/ File "DenHạn", sheet Y
1/ Nếu cột D5:D1000 có cell ngày/tháng/năm thỏa điều kiện:
Trước ngày hiện hành (ngày hệ thống máy tính) 2 ngày, hay 1 ngày, hoặc bằng ngày hiện hành hoặc sau 1 ngày hiện hành. Thì khi ta mở File "ThongBaoDenHan" thì sẽ tự động kích họat File "DenHan" và sẽ hiện thông báo đồng thời tô màu chữ !
Trường hợp không có cell nào thỏa điều kiện nói trên thì File "DenHạn" tự đóng
Nếu chúng ta không muốn nó hiện thông báo nữa thì ta chọn chữ R ở cột E của dòng tương ứng
2/ Với các ngày kỷ niệm hàng năm thì ta nhập ngày tại C6:C18, cthức sẽ tính ở cột D của dòng tương ứng
3/ Còn các ngày khác thì ta nhập trực tiếp từ D19 trở xuống

III/ Các bạn có thể tạo File "ThongBaoDenHan" thành Add-In. Như vậy mỗi khi mở Excel lên thì nếu thỏa điều kiện nói trên thì sẽ tự động kích họat File "DenHan" và sẽ hiện thông báo!
----------------
P/s:Các Thầy cô & anh chị đóng góp ý kiến để File trên hữu dụng hơn!
- File này được bắt nguồn từ đây http://www.giaiphapexcel.com/forum/...âp-trình-tự-động-mở-file-theo-thời-gian/page2
- Đã thử nghiệm chạy tốt trên Excel 2003 và 2010
Xin Cảm ơn!

Code chính
Mã:
Sub Auto_Open()
    Dim Today As Long, Tmparr, Item, tmp
    Dim chk As Boolean, FileName$
    Dim i, Arr(), Text As String, Text1 As String, Text2 As String, Text3 As String
    Text = "CO2N 2 NGA2Y LA2 D9E61N: "
    Text1 = "CO2N 1 NGA2Y LA2 D9E61N: "
    Text2 = "HO6M NAY LA2: "
    Text3 = "D9A4 QUA 1 NGA2Y: "
    Debug.Print chk


    Today = Date
    FileName = "D:\Tam\DenHan.xls"
    With CreateObject("Scripting.FileSystemObject")
        Workbooks.Open "D:\Tam\DenHan.xls"
        If .FileExists("D:\Tam\DenHan.xls") Then
            With Application
                .ScreenUpdating = 0
                .DisplayAlerts = 0
                .Workbooks.Open FileName
            End With
            Tmparr = Sheets("Y").Range("D5:D1000").Value
            Sheets("Y").Range("B5:B1000").Font.ColorIndex = 1
            For Each Item In Tmparr
                If Len(Item) Then
                    tmp = CDate(Format(Item, "dd/mm/yyyy"))
                    If Today - tmp >= -2 And Today - tmp <= 1 Then chk = True


                End If
            Next
            If chk Then
                With Sheets("Y")


                    Arr = Range([D5], [D65536].End(3)).Resize(, 2)
                    For i = 1 To UBound(Arr)
                        If Arr(i, 1) <> "" And Arr(i, 2) = "" Then
                            If Today - Arr(i, 1) = -2 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text, "VNI") & Cells(i + 4, 2).Value, , "THÔNG BÁO by H.V", vbOKOnly
                                Cells(i + 4, 2).Font.ColorIndex = 3


                            End If
                            If Today - Arr(i, 1) = -1 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text1, "VNI") & Cells(i + 4, 2).Value, , "THÔNG BÁO by H.V", vbOKOnly
                                Cells(i + 4, 2).Font.ColorIndex = 7


                            End If
                            If Today - Arr(i, 1) = 0 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text2, "VNI") & Cells(i + 4, 2).Value, , "THÔNG BÁO by H.V", vbOKOnly
                                Cells(i + 4, 2).Font.ColorIndex = 5


                            End If
                            If Today - Arr(i, 1) = 1 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text3, "VNI") & Cells(i + 4, 2).Value, , "THÔNG BÁO by H.V", vbOKOnly
                                Cells(i + 4, 2).Font.ColorIndex = 50
                            End If
                        End If
                    Next
                End With
            Else
                Workbooks("DenHan.xls").Close
            End If
        End If
    End With
    With Application
        .ScreenUpdating = 1
        .DisplayAlerts = 1
    End With
End Sub

Mình không muốn cố định 1 file DenHan.xls ở thư mục D:\Tam\, mà mình muốn đọc nhều file trong một thư mục nào đó có được không?
 
Upvote 0
Chào các ACE và các bạn!
Tôi mới biết đến bài viết này, nó rất tuyệt vời đối với công việc của tôi. Trân trong cảm ơn Hồng Vân và ace.
Sau 1 thời gian dùng, tôi muốn thay đổi 1 số điều kiện trong đó, như:
1. Cột D >1000;
2. Thay đổi cột: B,C,D,E thành E,F,G,H;
3. Thêm nút Back.

Rất mong mọi người giúp đỡ.
Trân trọng!
 
Upvote 0
Sau 1 thời gian dùng, tôi muốn thay đổi 1 số điều kiện trong đó, như:
1. Cột D >1000;
2. Thay đổi cột: B,C,D,E thành E,F,G,H;
Thay code này trong File:"ThongBaoDenHan"
Mã:
Sub Auto_Open()
    Dim Today As Long, Tmparr, Item, tmp
    Dim chk As Boolean, FileName$
    Dim i, Arr(), Text As String, Text1 As String, Text2 As String, Text3 As String
    Text = "CO2N 2 NGA2Y LA2 D9E61N: "
    Text1 = "CO2N 1 NGA2Y LA2 D9E61N: "
    Text2 = "HO6M NAY LA2: "
    Text3 = "D9A4 QUA 1 NGA2Y: "
    Debug.Print chk

    Today = Date
    FileName = "D:\Tam\DenHan.xls"
    With CreateObject("Scripting.FileSystemObject")
        Workbooks.Open "D:\Tam\DenHan.xls"
        If .FileExists("D:\Tam\DenHan.xls") Then
            With Application
                .ScreenUpdating = 0
                .DisplayAlerts = 0
                .Workbooks.Open FileName
            End With
            Tmparr = Sheets("Y").Range("G5:G10000").Value
            Sheets("Y").Range("E5:E10000").Font.ColorIndex = 1
            For Each Item In Tmparr
                If Len(Item) Then
                    tmp = CDate(Format(Item, "dd/mm/yyyy"))
                    If Today - tmp >= -2 And Today - tmp <= 1 Then chk = True

                End If
            Next
            If chk Then
                With Sheets("Y")

                    Arr = Range([G5], [G65536].End(3)).Resize(, 2)
                    For i = 1 To UBound(Arr)
                        If Arr(i, 1) <> "" And Arr(i, 2) = "" Then
                            If Today - Arr(i, 1) = -2 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text, "VNI") & Cells(i + 4, 5).Value, , "THÔNG BÁO by H.V", vbOKOnly
                                Cells(i + 4, 5).Font.ColorIndex = 3

                            End If
                            If Today - Arr(i, 1) = -1 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text1, "VNI") & Cells(i + 4, 5).Value, , "THÔNG BÁO by H.V", vbOKOnly
                                Cells(i + 4, 5).Font.ColorIndex = 7

                            End If
                            If Today - Arr(i, 1) = 0 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text2, "VNI") & Cells(i + 4, 5).Value, , "THÔNG BÁO by H.V", vbOKOnly
                                Cells(i + 4, 5).Font.ColorIndex = 5

                            End If
                            If Today - Arr(i, 1) = 1 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text3, "VNI") & Cells(i + 4, 5).Value, , "THÔNG BÁO by H.V", vbOKOnly
                                Cells(i + 4, 5).Font.ColorIndex = 50
                            End If
                        End If
                    Next
                End With
            Else
                Workbooks("DenHan.xls").Close
            End If
        End If
    End With
    With Application
        .ScreenUpdating = 1
        .DisplayAlerts = 1
    End With
End Sub
Chép Chép file "DenHan" (mới)vào thư mục D:\Tam\DenHan.xls
Chưa hiểu lắm, lưu ý khi chạy code thì không Undo được
 

File đính kèm

  • DenHan.xls
    388.5 KB · Đọc: 46
Upvote 0
Chưa hiểu lắm, lưu ý khi chạy code thì không Undo được
Nghe "chạy code thì không Undo được" buồn quá :confused:
<Application.OnUndo> Nó được tạo ra để vậy chơi ta

Đơn giản 1 ví dụ này thôi:
PHP:
Public ABCDEF As String
Sub setUndo()
  ABCDEF = [A10].value
  [A10].value = "Hè hé he"
  Application.OnUndo "SetForUndo", "getUndo"
End Sub
Sub getUndo()
  [A10].value = ABCDEF
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
2018-12-07_095140.jpg

Mình muốn thêm nút Back kiểu vậy này :D
Bài đã được tự động gộp:

Thật tuyệt vời! Cảm ơn Hong.Van và ace nhiều.
 
Upvote 0
Bạn có thể hướng dẫn chi tiết cách thực hiện không. Cảm ơn bạn!
Thì chạy code rồi ấn Undo thôi.
Application.OnUndo "SetForUndo", "getUndo"
nó gán macro getUndo vào nút Undo.
Public ABCDEF As String / Variant / "FSO" / New Collection / (Object) / CSDL / TXT / nhiều nhiều
ABCDEF là để lưu tạm Dữ liệu Undo.
 
Lần chỉnh sửa cuối:
Upvote 0
Chào Hồng Vân và các ACE!
vẫn ở chủ đề bài này của a Hồng Vân đã có 1 hàm =IF(F7="";"";DATE(YEAR(TODAY());MONTH(F7);DAY(F7))), hàm này thông báo hàng năm.
Em muốn có thêm hàm Tuần, Tháng, Quý
A Hồng Vân và mọi người giúp em dc ko?
em xin cảm ơn mọi người trước ah!
 
Upvote 0
Chào Hồng Vân và các ACE!
vẫn ở chủ đề bài này của a Hồng Vân đã có 1 hàm =IF(F7="";"";DATE(YEAR(TODAY());MONTH(F7);DAY(F7))), hàm này thông báo hàng năm.
Em muốn có thêm hàm Tuần, Tháng, Quý
A Hồng Vân và mọi người giúp em dc ko?
em xin cảm ơn mọi người trước ah!
Bạn cần phải giải thích rỏ
Dựa vào đâu? và muốn kết quả như thế nào?
 
Upvote 0
Mình muốn thông báo chạy liên tục trong khoảng 30 ngày bạn cho mình biết cách sửa Code nhé Hong.Van
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom