В настоящее время я застрял в том, как реализовать процедуру для получения и хранения информации в VBA.
Цель:
- Чтобы получить список агентов, которым нужно назначить задачу (и).
- Получить список задач (номер заявки) для каждого агента
- Форматирование информации в определенную структуру для ответа по электронной почте
В настоящее время у меня есть функция, которая может получить имя агента (isagent (sAgent)) и проверить его, получить номер билета(Incident ()) и проверяет его, а также функция для ответа на сообщение со строкой для форматирования сообщения (sBody).
Проблемы:
Контейнер хранения для вводимых данныхмоя задержкаЯ не верю, что массив является правильным выбором для этого, так как количество агентов и билетов на агентов может меняться ежедневно.
Например: вчерашний запрос: переназначить билет 123 человеку 1
Сегодняшняя просьба - переназначить билеты 123, 456 и 789 на человека 1. Переназначить 012 на человека 2, переназначить 345, 678, 901, 234 и 567 на человека 3
Формат:
Формат хранимых данных должен быть возвращен следующим образом:
Пример. Вчерашний запрос: 123 был переназначен на person1.Сегодняшний запрос: 123, 456 и 789 были переназначены на человека 1. 012 был переназначен на человека 2. 345, 678, 901, 234 и 567 были переназначены на человека 3
Код:
Этот раздел предназначен для формата тела сообщения, его можно объединить в одну строку (sBody).Переменные в настоящее время установлены как sIncs для номеров заявок, sXferAgent для агентов и sTense для времени предложения.
'Set Body Reply
Dim sOpen, sBody, sAddendum, sClose As String 'Message Reply Format
sOpen = "<span style=""font-size:11.0pt;font-family:"Calibri",sans-serif;mso-bidi-font-family:" & vbCrLf & _
"Arial"">Team, <o:p></o:p></span>" & vbCrLf
sBody = "<p><span style=""font-size:11.0pt;font-family:"Calibri",sans-serif;mso-bidi-font-family:" & vbCrLf & _
"Arial"">" & sINCs & " " & sTense & " been created and assigned to " & sXferAgent & "<o:p></o:p></span></p>" & vbCrLf
sClose = "<p><span style=""font-size:11.0pt;font-family:"Calibri",sans-serif;mso-bidi-font-family:" & vbCrLf & _
"Arial"">Thanks & Regards,<o:p></o:p></span></p>" & vbCrLf & _
"<p><br/></p>"
olMsgReplyAll.HTMLBody = sOpen & sBody & sClose & sSig & olMsgReplyAll.HTMLBody
Чтобы получить форматы заявок и агентов, ниже я их называю:
Dim sInc As String
'Receive Incident Number as AlphaNumeric
sInc = Incident()
If sInc = "" Then
Exit Sub
End If
'Receive Agent Name
sAgent = ValidateAgent
If sAgent = "" Then
Exit Sub
End If
В настоящее время моя недоумка заключается в следующем:
Sub Handoff()
'Get reassigned tickets in loop
'Asks for how many agents, ticket count per agent, gathers agent name and tickets for agent
'Functions in place for get agent name, and ticket number preformatted
'storage container issues for above process
'Formats data into separate lines with verbiage
Dim colReassignments As New Collection 'container for all reassignments
Dim colAgents As New Collection 'container for agents
Dim colTickets As New Collection 'container for tickets
Dim ReassignCount As Integer '# of tickets for the agent
Dim ReassignAgent As Integer 'Agents to reassign to
Dim Reassignments() As String
'Start inquiry
ReassignAgent = InputBox("Input number of Agents tickets being reassigned to:", "Agent Counter")
If ReassignAgent = vbNullString Then
Exit Sub
End If
While ReassignAgent > 0
colAgents.Add = ValidateAgent
ReassignCount = InputBox("Input number of ticket being reassigned to agent:", "Ticket Counter")
If ReassignCount = vbNullString Then
Exit Sub
End If
For Each agent In colAgents
For Each ticket In colTickets
agent(x).ticket(y) = Incident()
If agent(x).ticket(y) = "" Then
Exit Sub
End If
agent(x) = ValidateAgent
If agent(x) = "" Then
Exit Sub
End If
ReassignCount = ReassignCount - 1
Next ticket
Next agent
Wend
'Sentence Formatting
'Get Tense of reassignment
If ReassignCount > 1 Then
tense = "have"
Else
tense = "has"
End If
'Compile stored info
'Format: "(Ticket#(s)) (tense) been reassigned to (Agent)" repeat lines as necessary
'Process email
'In another module
End Sub
Любые предложения или пожелания приветствуются.Возможно, я слишком усложняю проблему.
Обновлено с учетом дополнительных модулей:
'Function to get ticket number
Public Function Incident()
Dim strPattern As String: strPattern = "^(?:INC|NC|C)?([0-9]{1,8}$)"
Dim strReplaceINC As String: strReplaceINC = "$1"
Dim regEx As New RegExp
Dim strInput As String
Dim IncResult As Boolean
Do
If strPattern <> "" Then
strInput = InputBox("Input Incident Number", "Ticket Number")
If strInput = vbNullString Then
Exit Function
End If
IncResult = False
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = True
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
sInc = regEx.Replace(strInput, strReplaceINC)
sInc = "INC" & Format(sInc, "00000000")
IncResult = True
Else
MsgBox ("Please input a valid ticket number format")
IncResult = False
End If
End If
Loop While IncResult = False
Incident = sInc
End Function
'Function to select Agent
Public Function IsAgent(stxt As String) As Boolean
Dim aAgent As Variant, oItem As Variant, bans As Boolean
aAgent = Array("Bob", "Chuck", "David", "Fred", "John", "Kirk", "Paul", "Sean")
bans = False
For Each oItem In aAgent
If LCase(oItem) = LCase(Trim(stxt)) Then
bans = True
Exit For
End If
Next
IsAgent = bans
End Function
'Function to Validate Agent
Public Function ValidateAgent()
'Dim sAgent As String 'Assigned Agent
Do
sAgent = InputBox("Please enter a the assigned agent's name:", "Pick an Assignee's Name")
If sAgent = vbNullString Then
Exit Function
End If
If sAgent <> "" Then
If GlobalVars.IsAgent(sAgent) = True Then
sAgent = sAgent
Else
MsgBox ("Incorrect Name, pick a new one!")
End If
End If
Loop While GlobalVars.IsAgent(sAgent) = False
ValidateAgent = sAgent
End Function