Cách in danh sách tất cả các cuộc hẹn bận trong một phạm vi ngày cụ thể qua Outlook VBA

Chia sẻ ngay bây giờ:

Bài viết này sẽ hướng dẫn bạn một phương pháp dễ dàng để in ra danh sách tất cả các cuộc hẹn được hiển thị là “Bận” và được lên lịch trong một phạm vi ngày cụ thể.

Việc tìm tất cả các cuộc hẹn bận trong một khoảng thời gian cụ thể bằng cách duyệt qua tất cả các lịch khá dễ dàng. Bạn chỉ cần đặt phạm vi tìm kiếm thành “Tất cả mục lịch”. Sau đó, tìm kiếm các cuộc hẹn có “Hiển thị thời gian là” bằng “Bận” và nằm trong khoảng ngày bắt đầu và ngày kết thúc cụ thể. Tuy nhiên, theo cách này, khi muốn in các cuộc hẹn đã tìm thấy và vào “Tệp” > “In”, bạn sẽ thấy chỉ có tùy chọn “Kiểu ghi chú” khả dụng. Điều đó có nghĩa là bạn không thể in các cuộc hẹn đã tìm thấy dưới dạng danh sách. Vì vậy, nếu bạn muốn in danh sách các cuộc hẹn đó, bạn có thể sử dụng cách sau.

Chỉ có kiểu Bản ghi nhớ cho các cuộc hẹn đã tìm thấy

In danh sách tất cả các cuộc hẹn bận trong một phạm vi ngày cụ thể

  1. Ngay từ đầu, hãy khởi chạy trình soạn thảo Outlook VBA thông qua “Alt + F11”.
  2. Tiếp theo, trong cửa sổ bật lên “Microsoft Visual Basic for Applications”, hãy thêm tham chiếu đến “MS Excel Object Library” theo hướng dẫn trong “Cách thêm tham chiếu thư viện đối tượng trong VBA".
  3. Sau đó, đặt mã VBA sau vào tệp module.
Dim dStart, dEnd As Date
Dim objExcelApp As Excel.Application
Dim objExcelWorkbook As Excel.Workbook
Dim objExcelWorksheet As Excel.Worksheet

Sub PrintListOfAllBusyAppointments()
    Dim objStore As Store
    Dim objFolder As Folder
 
    dStart = InputBox("Enter the start date:", , Date)
    dEnd = InputBox("Enter the end date:", , Date + 30)
 
    Set objExcelApp = CreateObject("Excel.Application")
    Set objExcelWorkbook = objExcelApp.Workbooks.Add
    Set objExcelWorksheet = objExcelWorkbook.Sheets(1)
    objExcelApp.Visible = True
 
    With objExcelWorksheet
         .Cells(1, 1) = "Subject"
         .Cells(1, 1).Font.Bold = True
         .Cells(1, 2) = "Location"
         .Cells(1, 2).Font.Bold = True
         .Cells(1, 3) = "Start"
         .Cells(1, 3).Font.Bold = True
         .Cells(1, 4) = "End"
         .Cells(1, 4).Font.Bold = True
         .Cells(1, 5) = "In Folder"
         .Cells(1, 5).Font.Bold = True
    End With
 
    For Each objStore In Application.Session.Stores
        For Each objFolder In objStore.GetRootFolder.Folders
            If objFolder.DefaultItemType = olAppointmentItem Then
               Call ProcessFolders(objFolder)
            End If
        Next
    Next
 
    objExcelWorksheet.Columns("A:E").AutoFit
    objExcelWorksheet.PrintOut
    objExcelWorkbook.Close False
    objExcelApp.Quit
End Sub

Sub ProcessFolders(ByVal objCurFolder As Folder)
    Dim strFilter As String
    Dim objItems As Outlook.Items
    Dim objRestrictedItems As Outlook.Items
    Dim objAppointment As AppointmentItem
    Dim nLastRow As Integer
    Dim objSubFolder As Folder
 
    Set objItems = objCurFolder.Items
    objItems.IncludeRecurrences = True
    objItems.Sort "[Start]"
 
    'Get the appointments in the specific date range
    strFilter = "[Start] >= " & Chr(34) & dStart & " 00:00 AM" & Chr(34) & " AND [End] <= " & Chr(34) & dEnd & " 11:59 PM" & Chr(34)
    Set objRestrictedItems = objItems.Restrict(strFilter)

    For Each objAppointment In objRestrictedItems
        If objAppointment.BusyStatus = olBusy Then
           nLastRow = objExcelWorksheet.Range("A" & objExcelWorksheet.Rows.Count).End(xlUp).Row + 1
 
           With objExcelWorksheet
                .Range("A" & nLastRow) = objAppointment.Subject
                .Range("B" & nLastRow) = objAppointment.Location
                .Range("C" & nLastRow) = objAppointment.Start
                .Range("D" & nLastRow) = objAppointment.End
                .Range("E" & nLastRow) = objCurFolder.FolderPath
           End With
        End If
    Next

    'Process all subfolders recursively
    If objCurFolder.Folders.Count > 0 Then
       For Each objSubFolder In objCurFolder.Folders
           Call ProcessFolders(objSubFolder)
       Next
    End If
End Sub

Mã VBA - In danh sách tất cả các cuộc hẹn bận trong một phạm vi ngày cụ thể

  1. Sau đó, nhấp vào chương trình con đầu tiên và nhấn nút phím “F5”.
  2. Tiếp theo, bạn sẽ được yêu cầu chỉ định phạm vi ngày để tìm kiếm các cuộc hẹn.Chỉ định Phạm vi Ngày
  3. Sau đó, nhấp vào “OK” để tiếp tục macro.
  4. Cuối cùng, khi macro kết thúc, danh sách các cuộc hẹn bận trong phạm vi ngày được xác định trước trong tất cả các thư mục lịch sẽ được in, như minh họa trong ảnh chụp màn hình bên dưới.In danh sách tất cả các cuộc hẹn bận trong phạm vi ngày cụ thể

Xử lý Tham nhũng Outlook gây phiền nhiễu

Nếu Outlook của bạn luôn đóng không đúng cách, bạn có thể gặp phải nhiều vấn đề sau này. Trong số đó, tệp Outlook bị hỏng là tệp tồi tệ nhất. Nếu không muốn mất dữ liệu, bạn cần sử dụng công cụ sửa lỗi PST, chẳng hạn như DataNumen Outlook Repair. Nó có thể lấy lại dữ liệu tối đa từ Outlook bị hỏng tập tin.

Giới thiệu tác giả:

Shirley Zhang là một chuyên gia phục hồi dữ liệu trong DataNumen, Inc., công ty hàng đầu thế giới về công nghệ khôi phục dữ liệu, bao gồm sửa lỗi sql và các sản phẩm phần mềm sửa chữa triển vọng. Để biết thêm thông tin, hãy truy cập www.datanumennăm

Chia sẻ ngay bây giờ:

Được đóng lại.