Игнорирование ранее импортированных данных при импорте данных Excel на встречу Outlook

#excel #vba #outlook

#excel #vba #outlook

Вопрос:

У меня есть некоторый код, работающий для импорта данных из Excel, когда ячейка содержит слово «Да». Я хотел бы включить код для игнорирования любых записей, которые ранее были импортированы, при повторном запуске кода.

 Sub Permits()

    Dim OL As Outlook.Application, Appoint As Outlook.AppointmentItem, ES As Worksheet, _
    r As Long, i As Long, WB As ThisWorkbook

    Set WB = ThisWorkbook
    Set ES = WB.Sheets("Permits")
    r = ES.Cells(Rows.Count, 1).End(xlUp).Row
    Set OL = New Outlook.Application
For i = 2 To r



    If ES.Cells(i, 10) = "Yes" Then
    Set Appoint = OL.CreateItem(olAppointmentItem)
    With Appoint
        .Subject = ES.Cells(i, 3).Value
        .Start = ES.Cells(i, 7)   ES.Cells(i, 8).Value
        .ReminderSet = True
        .ReminderMinutesBeforeStart = 60
        .Body = "£" amp; ES.Cells(i, 6).Value
        .Save
    End With
    End If
Next i
 Set OL = Nothing

End Sub
  

Комментарии:

1. Используйте новый столбец для пометки при каждом добавлении элемента (т. Е., возможно, у столбца есть название ‘Added’ , а затем отметьте его Yes , как только вы назначите это назначение). Затем вы можете либо использовать фильтр для отображения только non-added элементов, либо проверить значение в этом столбце, чтобы решить, хотите ли вы добавить назначение

Ответ №1:

Вы можете пометить обработанные строки зеленым цветом, например: (отредактировано как req, оно ищет «Да» в ячейке 11)

 Option Explicit
Option Compare Text 'ignore case sensitivity when comparing strings

Sub Permits()

    Dim OL As Outlook.Application, ES As Worksheet, _
    r As Long, i As Long, WB As ThisWorkbook

    Set WB = ThisWorkbook
    Set ES = WB.Sheets("Permits")
    Set OL = New Outlook.Application

    r = ES.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To r
        With ES.Cells(i, 10)
            If .Value = "Yes" And .Offset(0, 1).Value <> "Yes" Then
                .Offset(0, 1).Value = "Yes"
                With OL.CreateItem(olAppointmentItem)
                    .Subject = ES.Cells(i, 3).Value
                    .Start = ES.Cells(i, 7)   ES.Cells(i, 8).Value
                    .ReminderSet = True
                    .ReminderMinutesBeforeStart = 60
                    .Body = "£" amp; ES.Cells(i, 6).Value
                    .Save
                End With
            End If
        End With
    Next i

    Set OL = Nothing
    Set WB = Nothing
    Set ES = Nothing

End Sub
  

Вы также можете создать отдельный столбец, чтобы отмечать их и т.д., Редактировать по мере необходимости. В качестве альтернативы вы можете сохранить электронную таблицу «чистой» и выполнить поиск существующих напоминаний с теми же данными.

Комментарии:

1. Из-за условного форматирования, настроенного на рабочем листе, это было бы невозможно — как я мог бы настроить его таким образом, если (i, 10) = «Да» и (i, 11) = «Нет», тогда он импортируется? (предполагая, что 11 будет содержать «да» или «нет» для определения того, импортировано ли оно уже?

2. Прошу прощения, с этим разобрались — однако, есть ли способ автоматически помечать ячейки в 11 как «Да» при запуске VBA?

3. Без проблем, я отредактировал свой ответ, так что теперь он ищет «Да» в ячейке 11, и если он не найден, он установит задачу и введет «Да». Пожалуйста, отметьте этот ответ как правильный, если это помогло 🙂

4. Большое вам спасибо, работает отлично! Вы оказали огромную помощь для полного любителя работы с VBA