В настоящее время работаю над формой заказа в Excel, и я застрял при отправке электронного письма с помощью кнопки макроса.
Теперь я видел в Интернете множество «как отправить электронную почту с помощью VBA в Excel», и японять, о чем они.
Моя проблема в том, что я хочу, чтобы в теле письма отображалась не только основная часть письма, но и чтобы я мог иметь случайное числовое значение для ячейки и макросаберет это и выводит значение этой ячейки вместе с текстом, специфичным для этой ячейки.
Например, форма заказа имеет 4 печатные платы, которые я могу заказать.На данный момент они будут обозначаться как A, B, C & D
Если я добавлю 100 в ячейку количества каждой печатной платы и нажму кнопку «Заказать».
Следующий адрес электронной почты будет выглядеть следующим образом:
Dear <Name>
I'd like to order 100 of A, 100 of B, 100 of C & 100 of D
Kind Regards,
<Name>
Между тем, если вдруг в следующем заказе, который я хочу разместить, я поставлю только 20 в A & 60 в C, электронное письмо изменится, чтобы отразить это изменение:
Dear <Name>
I'd like to order 20 of A & 60 of C
Kind Regards,
<Name>
Эти изменения заключаются в размещении запятой, полной остановки и символа et '&'.
Кто-нибудь может указать мне общее направление, как я могу это сделать / адаптировать текущие учебные пособия для получения требуемого результата?
Edit: кажется, есть небольшое недоразумение в форме, о которой я нахожусь, поэтому вот текущая настройка:
Чего я хочу добиться, нажав кнопку заказа: Принимает значения ячеек изстолбец количества, который соответствует каждой отдельной доске в столбце типа.
И принимает эти значения в основную часть письма.Что касается конкретного текста, такого как запятые и т. Д., Я думал больше как формат оператора if, например, если B3 имеет значение, а & B4 имеет значение, но B5 и B6 == 0, то отправьте сообщение в теле письма (B3) "(ref no)"+" & "+ (B4)" (ref no) "
и т. Д. На основании того, имеет ли какая-либо из этих ячеек значение в ней.Я не прошу, чтобы текст помещался в другие ячейки, такие как ячейка J7, содержащая «Я хотел бы» и т. Д., Этот тип текста я добавлю непосредственно в сценарий VBA.
@ BBRK -Что касается моего комментария к вашему ответу, это то, что я имею в виду, изменяя тело сообщения:
xMailBody = "Hi <NAME>" & vbNewLine & vbNewLine & _
"I'd like to order" & vbNewLine & _
"Kind Regards"
On Error Resume Next
Этот код отображается следующим образом:
Реально я хочу изменить текст, являющийся ссылкой в столбце А, и заменить его жестко заданным ссылочным номером, который будет соответствовать заказам, которые я сделал с поставщиком.
Также я хочу изменить расположение"0 of Vibro" и переместите это к после того, как я сказал, что хотел бы заказать, но не появляется на следующей строке, где его текущее значение находится рядом с разделом "С наилучшими пожеланиями".
@ BBRK здесьтекущий полный VBA:
Private Sub Board_Order()
Dim xMailBody As String
Dim xOutApp As Object
Dim xOutMail As Object
Dim count_var As Integer
Dim arr() As String
Dim arr_val() As Integer
Dim great_count As Integer
Dim arr_now As Integer
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
arr_now = 0
'Gets the count of number of zeroes available in the B3 to last data filled row of that column.
great_count = Application.WorksheetFunction.CountIf(Range("B3:B6" & Range("B3").End(Excel.XlDirection.xlDown).Row), ">0")
xMailBody = "Hi <NAME>" & vbNewLine & vbNewLine & _
"I'd like to order" & vbNewLine & _
"Kind Regards"
On Error Resume Next
'If orders are there then will go for further processing.
If great_count <> 0 Then
'Resizes array according to the count
ReDim arr(0 To great_count - 1)
ReDim arr_val(0 To great_count - 1)
'Loops through the range and input product into the arr and it's value in arr_val
If great_count > 0 Then
For i = 3 To Range("B3").End(Excel.XlDirection.xlDown).Row
If Range("B" & i).Value > 0 Then
arr(arr_now) = Range("A" & i).Value
arr_val(arr_now) = Range("B" & i).Value
arr_now = arr_now + 1
End If
Next i
End If
'Looping through each element in the array to get the desired result.
If great_count = 1 Then
xMailBody = xMailBody + " " + CStr(arr_val(j)) + " of " + arr(j)
Else
For j = 0 To UBound(arr)
If j = 0 Then
xMailBody = xMailBody + " " + CStr(arr_val(j)) + " of " + arr(j)
ElseIf j = UBound(arr) Then
xMailBody = xMailBody + " & " + CStr(arr_val(j)) + " of " + arr(j)
Else
xMailBody = xMailBody + " , " + CStr(arr_val(j)) + " of " + arr(j)
End If
Next j
End If
End If
With xOutMail
.To = "marcbrooks991@hotmail.com"
.CC = ""
.BCC = ""
.Subject = "Test email send by button clicking"
.Body = xMailBody
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub