Я совершенно новичок в использовании VBA, и я искал и использовал метод проб и ошибок, чтобы развить идею, которая мне нужна, чтобы помочь мне и моим коллегам.Но так как я больше не нахожу онлайн-страницы, которые могли бы помочь мне в дальнейшем, я просто сам начну и надеюсь, что вы сможете мне помочь!
Контекст: мы в основном работаем с аутсорсингами и фрилансерами, ииногда трудно отследить, кто недоступен и до какого времени.Вот почему я собрал воедино файл Excel, в котором пользовательская форма упрощает ввод дат, в которые люди (введенные через их адрес электронной почты) недоступны на листе Excel.Это был мой первый опыт VBA.
Теперь, следующий шаг - это тот, для которого я изо всех сил пытаюсь найти решение.Я хотел бы «подключить» этот файл Excel к Outlook, чтобы при нажатии «Отправить» или вводе адреса электронной почты макрос:
- проверял, введен ли введенный адрес электронной почтынаходится в рабочей таблице файла Excel
- проверяет, находится ли текущий момент между датами недоступности рядом с этим именем
- выдает сообщение, когда оба условия выполнены, чтобы сказать мне, что этот человекнедоступен, и позвольте мне отменить отправку электронного письма.
- необязательно: в приглашении к сообщению есть поля, заполненные соответствующим периодом недоступности для этого человека
Возможно ли подключитьсяExcel в Outlook таким образом, чтобы мы могли продолжать использовать Outlook для написания наших писем?Если да, то какая-то помощь или ссылка на уже существующее руководство было бы поразительным, поскольку мне не удалось найти что-либо жизнеспособное.
Упрощенно, это должно выглядеть примерно так:
Click “Send” in Outlook email window
Before sending, call Excel file (does not need to be visible)
Check e-mail address column (column A)
Matches “To” field in Outlook email window?
If No, Send email
If Yes, Check “From” date column (column C) next to corresponding email address
Present date is equal to or later than “From” date?
If No, Send Email
If Yes, Check “Until” Date column (column D): present date is earlier than or equal to present date?
If Yes, message prompt: “Name (column B) is not available from “From” until “Until”. Do you still want to send the e-mail?
Buttons:
Yes: Send Email
No: Close prompt, do not send email, but keep email open.
If No, Send Email
Кроме того, вот мой код для пользовательской формы в файле Excel:
Private Sub CommandDate1_Click()
DatePicker1.Show
AbsencePlannerUserForm.StartTextBox.SetFocus
End Sub
Private Sub CancelButton_Click()
Unload Me
End Sub
Private Sub ClearButton_Click()
Call AbsencePlannerUserForm_Initialize
End Sub
Private Sub CommandDate2_Click()
DatePicker2.Show
AbsencePlannerUserForm.EndTextBox.SetFocus
End Sub
Private Sub EndTextBox_Change()
End Sub
Private Sub ExtraInfoTextBox_Change()
End Sub
Private Sub OKButton_Click()
Dim M_Date As Date
Dim M_Item As String
M_Date1 = StartTextBox
M_Date2 = EndTextBox
M_Item = EmailTextBox
M_Info = ExtraInfoTextBox
Application.ScreenUpdating = False
LastRow = Abwesenheit1.Cells(Rows.Count, "D").End(xlUp).Row
For rw = 2 To LastRow
If Abwesenheit1.Cells(rw, "A") = M_Item And Cells(rw, "C") = M_Date1
And Cells(rw, "D") = M_Date2 And Cells(rw, "E") = M_Info Then GoTo Passem
Next rw
GoTo NO_Dups
Passem:
Application.ScreenUpdating = True
MsgBox "Der Urlaub für " & M_Item & " vom " & M_Date1 & " bis zum " & M_Date2 & " ist schon eingetragen."
Exit Sub
NO_Dups:
Dim emptyRow As Long
'Make Abwesenheit1 active
Abwesenheit1.Activate
'Determine emptyRow
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
'Transfer information
Cells(emptyRow, 1).Value = EmailTextBox.Value
Cells(emptyRow, 3).Value = StartTextBox.Value
Cells(emptyRow, 4).Value = EndTextBox.Value
Cells(emptyRow, 5).Value = ExtraInfoTextBox.Value
Application.Visible = True
Me.Hide
End Sub
Private Sub AbsencePlannerUserForm_Click()
End Sub
Private Sub AbsencePlannerUserForm_Initialize()
'Empty EmailTextBox
EmailTextBox.Value = ""
'Empty StartTextBox
StartTextBox.Value = ""
'Empty EndTextBox
EndTextBox.Value = ""
'Empty ExtraInfoTextBox
ExtraInfoTextBox.Value = ""
'Set Focus on EmailTextBox
EmailTextBox.SetFocus
End Sub
Sub open_form()
Application.Visible = False
UserForm1.Show vbModeless
End Sub
Private Sub StartTextBox_Change()
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.Visible = True
Me.Hide
End Sub
С нетерпением ждем вашего более опытного ввода!