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

Chia sẻ bởi:hands
★★★★★
Quảng cáo

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:TamDenHan.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 https://www.giaiphapexcel.com/forum/showthread.php?77905-H%E1%BB%8Fi-v%E1%BB%81-l%C3%A2p-tr%C3%ACnh-t%E1%BB%B1-%C4%91%E1%BB%99ng-m%E1%BB%9F-file-theo-th%E1%BB%9Di-gian/page2
– Đã thử nghiệm chạy tốt trên Excel 2003 và 2010
Xin Cảm ơn!

Code chính

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:TamDenHan.xls"
    With CreateObject("Scripting.FileSystemObject")
        Workbooks.Open "D:TamDenHan.xls"
        If .FileExists("D:TamDenHan.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

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!

Thay code này trong File:"ThongBaoDenHan"

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:TamDenHan.xls"
    With CreateObject("Scripting.FileSystemObject")
        Workbooks.Open "D:TamDenHan.xls"
        If .FileExists("D:TamDenHan.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:TamDenHan.xls

Chưa hiểu lắm, lưu ý khi chạy code thì không Undo được

3. Thêm nút Back.

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:

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

www.giaiphapexcel.com/diendan/threads/share-add-in-t%E1%BB%B1-%C4%91%E1%BB%99ng-m%E1%BB%9F-file-excel-v%C3%A0-th%C3%B4ng-b%C3%A1o-ng%C3%A0y-%C4%91%E1%BA%BFn-h%E1%BA%A1n.78300/

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
★★★★★ 5 ★ 1 👤 1 ▥ 0
Quảng cáo

Bạn nên đọc

One Response

  1. hands says:

    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:

    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

    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.

    http://www.giaiphapexcel.com/diendan/threads/share-add-in-t%E1%BB%B1-%C4%91%E1%BB%99ng-m%E1%BB%9F-file-excel-v%C3%A0-th%C3%B4ng-b%C3%A1o-ng%C3%A0y-%C4%91%E1%BA%BFn-h%E1%BA%A1n.78300/post-895338

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm