Cách tạo nhắc nhở trong excel và tự động mở file khi có nhắc nhở

  • Thread starter Thread starter Huy Nam
  • Ngày gửi Ngày gửi
Liên hệ QC

Huy Nam

Thành viên mới
Tham gia
19/3/19
Bài viết
7
Được thích
1
Chào cả nhà,

Hiện tại, mình đang có 1 file hợp đồng và mình muốn khi đến ngày hết hạn hợp đồng, mình không cần mở file này nhưng vẫn tự động mở file và báo nhắc nhở để mình biết
Thì mình có đọc tham khảo các cách như dùng VBA, nhưng chỉ dùng chức năng này của excel không thôi thì hình như chưa tự động mở file nhắc mình được

Vậy, bác nào có cách làm như mong muốn của em. Vui lòng chia sẻ code vba và cách làm để em học hỏi thêm với ạ

ĐÍnh kèm là file mẫu của em, hiện tại thì đang cài hàm excel thường để báo hết hạn thôi ạ. Còn muốn không mở file mà tự nhắc thì chưa được

Cám ơn cả nhà
 

File đính kèm

Bàn về giải pháp thực hiện trước nhé.
Theo cách tôi làm sẽ có 2 cách thực hiện:
1. Mở file excel hợp đồng trên cho chạy ngầm, kiểm tra rồi hiện thông báo nếu có, còn không thì lẳng lặng mà đóng.
2. Dùng VbScrip để kết nối, mở file excel, kiểm tra và hiện thông báo.

2 cách trên đều phải dùng công cụ có sẳn trong Windows là "Task Schedule" trong Control Panel để thiết lập nhiệm vụ tự động khởi chạy file Excel hoặc file VbScript trên ở một thời gian cố định trong ngày/ tuần mà bạn muốn kiểm tra. Ví dụ: khi mở máy tính lên, sẽ chạy tự động lúc 9:00 AM mỗi ngày để kiểm tra.
Các bạn khác có cách nào khác nữa thì chia sẽ cách làm để tham khảo nhé.
 
Bàn về giải pháp thực hiện trước nhé.
Theo cách tôi làm sẽ có 2 cách thực hiện:
1. Mở file excel hợp đồng trên cho chạy ngầm, kiểm tra rồi hiện thông báo nếu có, còn không thì lẳng lặng mà đóng.
2. Dùng VbScrip để kết nối, mở file excel, kiểm tra và hiện thông báo.

2 cách trên đều phải dùng công cụ có sẳn trong Windows là "Task Schedule" trong Control Panel để thiết lập nhiệm vụ tự động khởi chạy file Excel hoặc file VbScript trên ở một thời gian cố định trong ngày/ tuần mà bạn muốn kiểm tra. Ví dụ: khi mở máy tính lên, sẽ chạy tự động lúc 9:00 AM mỗi ngày để kiểm tra.
Các bạn khác có cách nào khác nữa thì chia sẽ cách làm để tham khảo nhé.

Xin chào @ongke0711 :)

Cám ơn chia sẻ của anh, em thấy chắc đúng điều em mong muốn rồi. Nhờ anh có thể chia sẻ cụ thể hơn không ah?
 
Chào cả nhà,

Hiện tại, mình đang có 1 file hợp đồng và mình muốn khi đến ngày hết hạn hợp đồng, mình không cần mở file này nhưng vẫn tự động mở file và báo nhắc nhở để mình biết
Thì mình có đọc tham khảo các cách như dùng VBA, nhưng chỉ dùng chức năng này của excel không thôi thì hình như chưa tự động mở file nhắc mình được

Vậy, bác nào có cách làm như mong muốn của em. Vui lòng chia sẻ code vba và cách làm để em học hỏi thêm với ạ

ĐÍnh kèm là file mẫu của em, hiện tại thì đang cài hàm excel thường để báo hết hạn thôi ạ. Còn muốn không mở file mà tự nhắc thì chưa được

Cám ơn cả nhà
Mình gửi ý tưởng nếu bằng hoặc nhỏ hơn ngày hiện tại thì sẽ thông báo tới ngày thanh toán
còn việc để mở ra file theo link thì chắc nhờ anh chị khác hỗ trợ thêm nhe, mình thì chưa thể làm được.
 

File đính kèm

Cũng được 90% không hiểu nếu báo thì đúng nhưng dùng lệnh mở file thì chỉ mở được 1 sheet, do vòng lặp tiếp theo nó chạy trên sheet hiện hành là file vừa mở.
Anh chị xem sai ở đâu nhe
 

File đính kèm

Lần chỉnh sửa cuối:
À thêm câu lệnh này nó chạy được rồi
Mã:
Windows("test.xlsb").Activate
Code trong file
Mã:
Private Sub Workbook_Open()
Dim wb As Workbook
Dim Sh As Worksheet
Dim C As Range
Dim i As Integer
On Error Resume Next
Application.ScreenUpdating = False
Set Sh = Sheets("aa")
For i = 2 To 10
    For Each C In Worksheets("aa").Range("B" & i)
    If Date >= C Then
    Windows("test.xlsb").Activate
MsgBox "Hop dong " & Range("C" & i).Value & " da toi han thanh toan. Mo file click OK"
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & Range("C" & i).Value
wb.Close SaveChanges:=False
        End If
     Next C
   Next i
   Application.ScreenUpdating = True
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
À thêm câu lệnh này nó chạy được rồi
Mã:
Windows("test.xlsb").Activate
Code trong file
Mã:
Private Sub Workbook_Open()
Dim wb As Workbook
Dim Sh As Worksheet
Dim C As Range
Dim i As Integer
On Error Resume Next
Application.ScreenUpdating = False
Set Sh = Sheets("aa")
For i = 2 To 10
    For Each C In Worksheets("aa").Range("B" & i)
    If Date >= C Then
    Windows("test.xlsb").Activate
MsgBox "Hop dong " & Range("C" & i).Value & " da toi han thanh toan. Mo file click OK"
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & Range("C" & i).Value
wb.Close SaveChanges:=Fals
        End If
     Next C
   Next i
   Application.ScreenUpdating = True
End Sub

Câu lệnh:
On Error Resume next
Bẫy lỗi cho trường hợp nào vậy bạn?

Phải chăng là câu này ạ?
wb.Close SaveChanges:=Fals
 
Xin chào @ongke0711 :)

Cám ơn chia sẻ của anh, em thấy chắc đúng điều em mong muốn rồi. Nhờ anh có thể chia sẻ cụ thể hơn không ah?

Tôi chia sẻ cách dùng Task Schedule của Windows để chạy file VBScript. File vbs này sẽ kiểm tra file excel cột [Status] của bạn để tìm chữ "EXPIRED", nếu có sẽ hiện thông báo cho biết. Sau đó thì bạn muốn mở file lên kiểmm tra hay không thì tuỳ.

Nói về tổ chức file excel:
- Trong file của bạn, các cột dữ liệu nên rõ ràng, chuẩn hoá. Bạn nên tách cột ngày - cột StartDate hiện tại của bạn thành 2 cột: StartDate , End Date và định dạng ngày cho đúng kiểu. Hiện tại bạn phải dùng thêm hàm Right() để tách dữ liệu ngày hết hạn rồi mới tính toán. Cách này không hiệu quả, hạn chế dùng hàm hết mức có thể nếu CSDL của bạn có thể tổ chức hợp lý, chuẩn hoá. Như trường hợp của bạn, nếu bạn tách thêm cột ngày hết hạn (EndDate) thì chỉ cần so sách ngày với nhau là được rồi, không cần thêm hàm Right() vô làm gì cho nặng công thức.
- Nên đặt tên Sheet không có khoảng trắng để thuận tiện cho viết code. Tên file cũng không nên quá dài như hiện tại và nếu không có khoảng trắng luôn càng tốt. Những cái tên này sẽ được khai báo trong code nên càng chuẩn và ít thay đổi càng tốt.
Vd: Tên hiện tại "PVDR Contract Management Update until 2019" ==> "PVDRContractMgmt_YTD2019.xlsm" YTD: Year to date

Cách làm:
Trong file Excel:
- Tạo một hàm kiểm tra quá hạn bằng cách kiếm cái text "EXPIRED" ở cột J. Nếu có thì hiện thông báo.
- Trong demo này xem như các cột ngày tháng bạn định dạng đúng.

Hàm CheckExpDate()

Mã:
Sub KiemTraHD()
   CheckExpDate "EXPIRED", "J"
End Sub

Function CheckExpDate(FindString As String, ColumnToCheck As String) As Boolean
    Dim rngCheck As Range
    Dim rng As Range
    Dim SheetLastRow As Integer

    SheetLastRow = Sheets("PeriodicalContractSunrise").Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Set rngCheck = Sheets("PeriodicalContractSunrise").Range("$" & ColumnToCheck & "$1:$" & ColumnToCheck & "$" & CStr(SheetLastRow))
    With rngCheck
        Set rng = .Find(What:=FindString, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        lookat:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
        If Not rng Is Nothing Then
            CheckExpDate = True
            MsgBoxUni "Có h" & ChrW(7907) & "p " & ChrW(273) & ChrW(7891) & "ng " & ChrW(273) & ChrW(7871) & "n h" & ChrW(7841) & "n ho" & ChrW(7863) & "c " & ChrW(273) & "ã quá h" & ChrW(7841) & "n c" & ChrW(7847) & "n ki" & ChrW(7875) & "m tra.", vbCritical + vbSystemModal, "C" & ChrW(7843) & "nh báo."
        Else
            CheckExpDate = False
        End If
    End With
    Exit Function
End Function


Code cho file Vbs như sau: mở notepad.exe, copy đoạn code sau vào và lưu tên tuỳ ý và đổi đuôi .txt thành .vbs (vd: KiemTraQuaHanHD.vbs)

Mã:
Dim WshShell
    Set WshShell = CreateObject("WScript.Shell")

    ' Tao Excel instances
    Dim appExcel
    Set appExcel = CreateObject("Excel.Application")

    ' Tat tat ca canh bao cua Excel
    appExcel.DisplayAlerts = False
    appExcel.AskToUpdateLinks = False
    appExcel.AlertBeforeOverwriting = False
    appExcel.FeatureInstall = msoFeatureInstallNone

    ' Luu duong dan file excel hien tai de sau nay tra ve duong dan goc
    Dim strSaveDefaultPath
    Dim strPath
    strSaveDefaultPath = appExcel.DefaultFilePath
    strPath = WshShell.CurrentDirectory
    appExcel.DefaultFilePath = strPath

    ' Mo file excel
    Dim oWb
    Dim sWBFileName
    sWBFileName = strPath & "\PVDR Contract Management Update until 2019.xlsm"

    Set oWb = appExcel.Workbooks.Open(sWBFileName)

    appExcel.Application.Visible = False

    Dim strMacroName
    strMacroName = "'" & strPath & "\PVDR Contract Management Update until 2019.xlsm'" & "!basFunctions.KiemTraHD"

    On Error Resume Next
    ' Chay macro hoac function trong file excel
    appExcel.Application.Run strMacroName    '("basFunctions.KiemTraHD")

    If Err.Number <> 0 Then
        MsgBox "Co loi phat sinh"
        ' Khi co loi phat sinh thì xoa nó
    End If
    Err.Clear
    On Error GoTo 0

    oWb.Close acSaveNo
    'oWb.Save

    appExcel.DefaultFilePath = strSaveDefaultPath

    Set oWb = Nothing

    ' Kiem tra xem co file excel nao khac dang chay thi khong Quit, nguoc lai thi quit.
    If appExcel.Workbooks.Count = 0 Then
        appExcel.Quit
    End If

    Set appExcel = Nothing
    Set WshShell = Nothing



Bước kế tiếp là thiết lập trong windows để tự động chạy file .vbs này theo một thời gian chỉ định mà bạn muốn.
Vào Control Panel - Administrative tool - task schedule và thiết lập như hình hướng dẫn.









Xong.

Link file demo:
http://www.mediafire.com/file/efman3mkf4255a9/TuDongChayExcel.rar/file
 
Lần chỉnh sửa cuối:
Tôi chia sẻ cách dùng Task Schedule của Windows để chạy file VBScript. File vbs này sẽ kiểm tra file excel cột [Status] của bạn để tìm chữ "EXPIRED", nếu có sẽ hiện thông báo cho biết. Sau đó thì bạn muốn mở file lên kiểmm tra hay không thì tuỳ.

Nói về tổ chức file excel:
- Trong file của bạn, các cột dữ liệu nên rõ ràng, chuẩn hoá. Bạn nên tách cột ngày - cột StartDate hiện tại của bạn thành 2 cột: StartDate , End Date và định dạng ngày cho đúng kiểu. Hiện tại bạn phải dùng thêm hàm Right() để tách dữ liệu ngày hết hạn rồi mới tính toán. Cách này không hiệu quả, hạn chế dùng hàm hết mức có thể nếu CSDL của bạn có thể tổ chức hợp lý, chuẩn hoá. Như trường hợp của bạn, nếu bạn tách thêm cột ngày hết hạn (EndDate) thì chỉ cần so sách ngày với nhau là được rồi, không cần thêm hàm Right() vô làm gì cho nặng công thức.
- Nên đặt tên Sheet không có khoảng trắng để thuận tiện cho viết code. Tên file cũng không nên quá dài như hiện tại và nếu không có khoảng trắng luôn càng tốt. Những cái tên này sẽ được khai báo trong code nên càng chuẩn và ít thay đổi càng tốt.
Vd: Tên hiện tại "PVDR Contract Management Update until 2019" ==> "PVDRContractMgmt_YTD2019.xlsm" YTD: Year to date

Cách làm:
Trong file Excel:
- Tạo một hàm kiểm tra quá hạn bằng cách kiếm cái text "EXPIRED" ở cột J. Nếu có thì hiện thông báo.
- Trong demo này xem như các cột ngày tháng bạn định dạng đúng.

Hàm CheckExpDate()

Mã:
Sub KiemTraHD()
   CheckExpDate "EXPIRED", "J"
End Sub

Function CheckExpDate(FindString As String, ColumnToCheck As String) As Boolean
    Dim rngCheck As Range
    Dim rng As Range
    Dim SheetLastRow As Integer

    SheetLastRow = Sheets("PeriodicalContractSunrise").Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Set rngCheck = Sheets("PeriodicalContractSunrise").Range("$" & ColumnToCheck & "$1:$" & ColumnToCheck & "$" & CStr(SheetLastRow))
    With rngCheck
        Set rng = .Find(What:=FindString, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        lookat:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
        If Not rng Is Nothing Then
            CheckExpDate = True
            MsgBoxUni "Có h" & ChrW(7907) & "p " & ChrW(273) & ChrW(7891) & "ng " & ChrW(273) & ChrW(7871) & "n h" & ChrW(7841) & "n ho" & ChrW(7863) & "c " & ChrW(273) & "ã quá h" & ChrW(7841) & "n c" & ChrW(7847) & "n ki" & ChrW(7875) & "m tra.", vbCritical + vbSystemModal, "C" & ChrW(7843) & "nh báo."
        Else
            CheckExpDate = False
        End If
    End With
    Exit Function
End Function


Code cho file Vbs như sau: mở notepad.exe, copy đoạn code sau vào và lưu tên tuỳ ý và đổi đuôi .txt thành .vbs (vd: KiemTraQuaHanHD.vbs)

Mã:
Dim WshShell
    Set WshShell = CreateObject("WScript.Shell")

    ' Tao Excel instances
    Dim appExcel
    Set appExcel = CreateObject("Excel.Application")

    ' Tat tat ca canh bao cua Excel
    appExcel.DisplayAlerts = False
    appExcel.AskToUpdateLinks = False
    appExcel.AlertBeforeOverwriting = False
    appExcel.FeatureInstall = msoFeatureInstallNone

    ' Luu duong dan file excel hien tai de sau nay tra ve duong dan goc
    Dim strSaveDefaultPath
    Dim strPath
    strSaveDefaultPath = appExcel.DefaultFilePath
    strPath = WshShell.CurrentDirectory
    appExcel.DefaultFilePath = strPath

    ' Mo file excel
    Dim oWb
    Dim sWBFileName
    sWBFileName = strPath & "\PVDR Contract Management Update until 2019.xlsm"

    Set oWb = appExcel.Workbooks.Open(sWBFileName)

    appExcel.Application.Visible = False

    Dim strMacroName
    strMacroName = "'" & strPath & "\PVDR Contract Management Update until 2019.xlsm'" & "!basFunctions.KiemTraHD"

    On Error Resume Next
    ' Chay macro hoac function trong file excel
    appExcel.Application.Run strMacroName    '("basFunctions.KiemTraHD")

    If Err.Number <> 0 Then
        MsgBox "Co loi phat sinh"
        ' Khi co loi phat sinh thì xoa nó
    End If
    Err.Clear
    On Error GoTo 0

    oWb.Close acSaveNo
    'oWb.Save

    appExcel.DefaultFilePath = strSaveDefaultPath

    Set oWb = Nothing

    ' Kiem tra xem co file excel nao khac dang chay thi khong Quit, nguoc lai thi quit.
    If appExcel.Workbooks.Count = 0 Then
        appExcel.Quit
    End If

    Set appExcel = Nothing
    Set WshShell = Nothing



Bước kế tiếp là thiết lập trong windows để tự động chạy file .vbs này theo một thời gian chỉ định mà bạn muốn.
Vào Control Panel - Administrative tool - task schedule và thiết lập như hình hướng dẫn.









Xong.

Link file demo:
http://www.mediafire.com/file/efman3mkf4255a9/TuDongChayExcel.rar/file
Em cám ơn anh nhiều nhé. Hình như đúng cái em cần rồi. Em sẽ thử
Bài đã được tự động gộp:

Em cám ơn mọi người đã nhiệt tình share cách làm giúp em nhé. Em xem và sẽ tìm hiểu thêm cách làm của các anh chị. Mong được hỗ trợ từ anh chị nhiều
<3
 
Chào cả nhà,

Hiện tại, mình đang có 1 file hợp đồng và mình muốn khi đến ngày hết hạn hợp đồng, mình không cần mở file này nhưng vẫn tự động mở file và báo nhắc nhở để mình biết
Thì mình có đọc tham khảo các cách như dùng VBA, nhưng chỉ dùng chức năng này của excel không thôi thì hình như chưa tự động mở file nhắc mình được

Vậy, bác nào có cách làm như mong muốn của em. Vui lòng chia sẻ code vba và cách làm để em học hỏi thêm với ạ

ĐÍnh kèm là file mẫu của em, hiện tại thì đang cài hàm excel thường để báo hết hạn thôi ạ. Còn muốn không mở file mà tự nhắc thì chưa được

Cám ơn cả nhà
Theo mình bạn nên sắp xếp lại dữ liệu tách ngày tháng ra 2 cột riêng biệt cột "Bắt đầu" và cột "Kết thúc" và áp dụng các bài trên
 
Tôi chia sẻ cách dùng Task Schedule của Windows để chạy file VBScript. File vbs này sẽ kiểm tra file excel cột [Status] của bạn để tìm chữ "EXPIRED", nếu có sẽ hiện thông báo cho biết. Sau đó thì bạn muốn mở file lên kiểmm tra hay không thì tuỳ.

Nói về tổ chức file excel:
- Trong file của bạn, các cột dữ liệu nên rõ ràng, chuẩn hoá. Bạn nên tách cột ngày - cột StartDate hiện tại của bạn thành 2 cột: StartDate , End Date và định dạng ngày cho đúng kiểu. Hiện tại bạn phải dùng thêm hàm Right() để tách dữ liệu ngày hết hạn rồi mới tính toán. Cách này không hiệu quả, hạn chế dùng hàm hết mức có thể nếu CSDL của bạn có thể tổ chức hợp lý, chuẩn hoá. Như trường hợp của bạn, nếu bạn tách thêm cột ngày hết hạn (EndDate) thì chỉ cần so sách ngày với nhau là được rồi, không cần thêm hàm Right() vô làm gì cho nặng công thức.
- Nên đặt tên Sheet không có khoảng trắng để thuận tiện cho viết code. Tên file cũng không nên quá dài như hiện tại và nếu không có khoảng trắng luôn càng tốt. Những cái tên này sẽ được khai báo trong code nên càng chuẩn và ít thay đổi càng tốt.
Vd: Tên hiện tại "PVDR Contract Management Update until 2019" ==> "PVDRContractMgmt_YTD2019.xlsm" YTD: Year to date

Cách làm:
Trong file Excel:
- Tạo một hàm kiểm tra quá hạn bằng cách kiếm cái text "EXPIRED" ở cột J. Nếu có thì hiện thông báo.
- Trong demo này xem như các cột ngày tháng bạn định dạng đúng.

Hàm CheckExpDate()

Mã:
Sub KiemTraHD()
   CheckExpDate "EXPIRED", "J"
End Sub

Function CheckExpDate(FindString As String, ColumnToCheck As String) As Boolean
    Dim rngCheck As Range
    Dim rng As Range
    Dim SheetLastRow As Integer

    SheetLastRow = Sheets("PeriodicalContractSunrise").Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Set rngCheck = Sheets("PeriodicalContractSunrise").Range("$" & ColumnToCheck & "$1:$" & ColumnToCheck & "$" & CStr(SheetLastRow))
    With rngCheck
        Set rng = .Find(What:=FindString, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        lookat:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
        If Not rng Is Nothing Then
            CheckExpDate = True
            MsgBoxUni "Có h" & ChrW(7907) & "p " & ChrW(273) & ChrW(7891) & "ng " & ChrW(273) & ChrW(7871) & "n h" & ChrW(7841) & "n ho" & ChrW(7863) & "c " & ChrW(273) & "ã quá h" & ChrW(7841) & "n c" & ChrW(7847) & "n ki" & ChrW(7875) & "m tra.", vbCritical + vbSystemModal, "C" & ChrW(7843) & "nh báo."
        Else
            CheckExpDate = False
        End If
    End With
    Exit Function
End Function


Code cho file Vbs như sau: mở notepad.exe, copy đoạn code sau vào và lưu tên tuỳ ý và đổi đuôi .txt thành .vbs (vd: KiemTraQuaHanHD.vbs)

Mã:
Dim WshShell
    Set WshShell = CreateObject("WScript.Shell")

    ' Tao Excel instances
    Dim appExcel
    Set appExcel = CreateObject("Excel.Application")

    ' Tat tat ca canh bao cua Excel
    appExcel.DisplayAlerts = False
    appExcel.AskToUpdateLinks = False
    appExcel.AlertBeforeOverwriting = False
    appExcel.FeatureInstall = msoFeatureInstallNone

    ' Luu duong dan file excel hien tai de sau nay tra ve duong dan goc
    Dim strSaveDefaultPath
    Dim strPath
    strSaveDefaultPath = appExcel.DefaultFilePath
    strPath = WshShell.CurrentDirectory
    appExcel.DefaultFilePath = strPath

    ' Mo file excel
    Dim oWb
    Dim sWBFileName
    sWBFileName = strPath & "\PVDR Contract Management Update until 2019.xlsm"

    Set oWb = appExcel.Workbooks.Open(sWBFileName)

    appExcel.Application.Visible = False

    Dim strMacroName
    strMacroName = "'" & strPath & "\PVDR Contract Management Update until 2019.xlsm'" & "!basFunctions.KiemTraHD"

    On Error Resume Next
    ' Chay macro hoac function trong file excel
    appExcel.Application.Run strMacroName    '("basFunctions.KiemTraHD")

    If Err.Number <> 0 Then
        MsgBox "Co loi phat sinh"
        ' Khi co loi phat sinh thì xoa nó
    End If
    Err.Clear
    On Error GoTo 0

    oWb.Close acSaveNo
    'oWb.Save

    appExcel.DefaultFilePath = strSaveDefaultPath

    Set oWb = Nothing

    ' Kiem tra xem co file excel nao khac dang chay thi khong Quit, nguoc lai thi quit.
    If appExcel.Workbooks.Count = 0 Then
        appExcel.Quit
    End If

    Set appExcel = Nothing
    Set WshShell = Nothing



Bước kế tiếp là thiết lập trong windows để tự động chạy file .vbs này theo một thời gian chỉ định mà bạn muốn.
Vào Control Panel - Administrative tool - task schedule và thiết lập như hình hướng dẫn.









Xong.

Link file demo:
http://www.mediafire.com/file/efman3mkf4255a9/TuDongChayExcel.rar/file
Các anh chị cho em hỏi trường hợp này
Hàng ngày em sẽ mở máy tính
Em muốn vào lúc 9h00 và 15h00 mỗi ngày, máy tính tự động mở cửa sổ Excel
(vì trong excel của em đã có sẵn addins rồi và đã có code Sub Auto_Open(), em chỉ cần mở cửa sổ excel thì code sẽ tự kích hoạt)
Trong trường hợp này thì sẽ làm như thế nào?
P/s: máy em sử dụng win 7, trong máy có 2 office 2003 và 2010
Em cảm ơn!
 
Các anh chị cho em hỏi trường hợp này
Hàng ngày em sẽ mở máy tính
Em muốn vào lúc 9h00 và 15h00 mỗi ngày, máy tính tự động mở cửa sổ Excel
(vì trong excel của em đã có sẵn addins rồi và đã có code Sub Auto_Open(), em chỉ cần mở cửa sổ excel thì code sẽ tự kích hoạt)
Trong trường hợp này thì sẽ làm như thế nào?
P/s: máy em sử dụng win 7, trong máy có 2 office 2003 và 2010
Em cảm ơn!
Thử xem
 
Các anh chị cho em hỏi trường hợp này
Hàng ngày em sẽ mở máy tính
Em muốn vào lúc 9h00 và 15h00 mỗi ngày, máy tính tự động mở cửa sổ Excel
(vì trong excel của em đã có sẵn addins rồi và đã có code Sub Auto_Open(), em chỉ cần mở cửa sổ excel thì code sẽ tự kích hoạt)
Trong trường hợp này thì sẽ làm như thế nào?
P/s: máy em sử dụng win 7, trong máy có 2 office 2003 và 2010
Em cảm ơn!

Bạn tạo 2 cái task cho 2 khung giờ nhé. Chọn Daily, Start a program là đường dẫn trực tới file excel có macro tự chạy của bạn, không cần thông qua file vbs để chạy file excel.
 
Tôi chia sẻ cách dùng Task Schedule của Windows để chạy file VBScript. File vbs này sẽ kiểm tra file excel cột [Status] của bạn để tìm chữ "EXPIRED", nếu có sẽ hiện thông báo cho biết. Sau đó thì bạn muốn mở file lên kiểmm tra hay không thì tuỳ.

Nói về tổ chức file excel:
- Trong file của bạn, các cột dữ liệu nên rõ ràng, chuẩn hoá. Bạn nên tách cột ngày - cột StartDate hiện tại của bạn thành 2 cột: StartDate , End Date và định dạng ngày cho đúng kiểu. Hiện tại bạn phải dùng thêm hàm Right() để tách dữ liệu ngày hết hạn rồi mới tính toán. Cách này không hiệu quả, hạn chế dùng hàm hết mức có thể nếu CSDL của bạn có thể tổ chức hợp lý, chuẩn hoá. Như trường hợp của bạn, nếu bạn tách thêm cột ngày hết hạn (EndDate) thì chỉ cần so sách ngày với nhau là được rồi, không cần thêm hàm Right() vô làm gì cho nặng công thức.
- Nên đặt tên Sheet không có khoảng trắng để thuận tiện cho viết code. Tên file cũng không nên quá dài như hiện tại và nếu không có khoảng trắng luôn càng tốt. Những cái tên này sẽ được khai báo trong code nên càng chuẩn và ít thay đổi càng tốt.
Vd: Tên hiện tại "PVDR Contract Management Update until 2019" ==> "PVDRContractMgmt_YTD2019.xlsm" YTD: Year to date

Cách làm:
Trong file Excel:
- Tạo một hàm kiểm tra quá hạn bằng cách kiếm cái text "EXPIRED" ở cột J. Nếu có thì hiện thông báo.
- Trong demo này xem như các cột ngày tháng bạn định dạng đúng.

Hàm CheckExpDate()

Mã:
Sub KiemTraHD()
   CheckExpDate "EXPIRED", "J"
End Sub

Function CheckExpDate(FindString As String, ColumnToCheck As String) As Boolean
    Dim rngCheck As Range
    Dim rng As Range
    Dim SheetLastRow As Integer

    SheetLastRow = Sheets("PeriodicalContractSunrise").Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Set rngCheck = Sheets("PeriodicalContractSunrise").Range("$" & ColumnToCheck & "$1:$" & ColumnToCheck & "$" & CStr(SheetLastRow))
    With rngCheck
        Set rng = .Find(What:=FindString, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        lookat:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
        If Not rng Is Nothing Then
            CheckExpDate = True
            MsgBoxUni "Có h" & ChrW(7907) & "p " & ChrW(273) & ChrW(7891) & "ng " & ChrW(273) & ChrW(7871) & "n h" & ChrW(7841) & "n ho" & ChrW(7863) & "c " & ChrW(273) & "ã quá h" & ChrW(7841) & "n c" & ChrW(7847) & "n ki" & ChrW(7875) & "m tra.", vbCritical + vbSystemModal, "C" & ChrW(7843) & "nh báo."
        Else
            CheckExpDate = False
        End If
    End With
    Exit Function
End Function


Code cho file Vbs như sau: mở notepad.exe, copy đoạn code sau vào và lưu tên tuỳ ý và đổi đuôi .txt thành .vbs (vd: KiemTraQuaHanHD.vbs)

Mã:
Dim WshShell
    Set WshShell = CreateObject("WScript.Shell")

    ' Tao Excel instances
    Dim appExcel
    Set appExcel = CreateObject("Excel.Application")

    ' Tat tat ca canh bao cua Excel
    appExcel.DisplayAlerts = False
    appExcel.AskToUpdateLinks = False
    appExcel.AlertBeforeOverwriting = False
    appExcel.FeatureInstall = msoFeatureInstallNone

    ' Luu duong dan file excel hien tai de sau nay tra ve duong dan goc
    Dim strSaveDefaultPath
    Dim strPath
    strSaveDefaultPath = appExcel.DefaultFilePath
    strPath = WshShell.CurrentDirectory
    appExcel.DefaultFilePath = strPath

    ' Mo file excel
    Dim oWb
    Dim sWBFileName
    sWBFileName = strPath & "\PVDR Contract Management Update until 2019.xlsm"

    Set oWb = appExcel.Workbooks.Open(sWBFileName)

    appExcel.Application.Visible = False

    Dim strMacroName
    strMacroName = "'" & strPath & "\PVDR Contract Management Update until 2019.xlsm'" & "!basFunctions.KiemTraHD"

    On Error Resume Next
    ' Chay macro hoac function trong file excel
    appExcel.Application.Run strMacroName    '("basFunctions.KiemTraHD")

    If Err.Number <> 0 Then
        MsgBox "Co loi phat sinh"
        ' Khi co loi phat sinh thì xoa nó
    End If
    Err.Clear
    On Error GoTo 0

    oWb.Close acSaveNo
    'oWb.Save

    appExcel.DefaultFilePath = strSaveDefaultPath

    Set oWb = Nothing

    ' Kiem tra xem co file excel nao khac dang chay thi khong Quit, nguoc lai thi quit.
    If appExcel.Workbooks.Count = 0 Then
        appExcel.Quit
    End If

    Set appExcel = Nothing
    Set WshShell = Nothing



Bước kế tiếp là thiết lập trong windows để tự động chạy file .vbs này theo một thời gian chỉ định mà bạn muốn.
Vào Control Panel - Administrative tool - task schedule và thiết lập như hình hướng dẫn.









Xong.

Link file demo:
http://www.mediafire.com/file/efman3mkf4255a9/TuDongChayExcel.rar/file
Bác ơi em có file này thì tạo Hàm CheckExpDate() ở cột E như thế nào được ạ.
Em cảm ơn.
 

File đính kèm

Web KT

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

Back
Top Bottom