Как изменить маркеры с помощью макроса Excel? - PullRequest
1 голос
/ 08 мая 2019

Быстрый вопрос:

Как вы форматируете саму точку маркера? Все точки маркера по-прежнему отображаются в виде звезд вместо обычного черного круга для первой пули и полого круга для вспомогательной пули. Я попытался определить стиль, но мой код выдает сообщение об ошибке при добавлении «list-style-type: disc;».

Используя w3schools, я понимаю, как это должно работать, но в моем Excel VBA, похоже, это не работает. Любая помощь будет оценена!

Sub Email_Budget()

   Dim objOutlook As Object
   Set objOutlook = CreateObject("Outlook.Application")

   Dim objEmail As Object
   Set objEmail = objOutlook.CreateItem(olMailItem)



   Dim CaseCount As Long
   CaseCount = WorksheetFunction.CountA(Range("B6:B500"))
   Debug.Print CaseCount

   Dim i As Integer

   With objEmail
      .To = "abc@xyz.com"
      .Subject = "TEST1: May 2019 Budget"
      .Body = "Kurt,"
      .Body = .Body & " "
      .Body = .Body & "The potential " & MonthName(Month(ActiveSheet.Range("A2"))) & " invoices are below."
      .Body = .Body & " "
      For i = 1 To CaseCount
        If ActiveSheet.Cells(i + 5, 4).Value = "Yes" Then
            .HTMLBody = .HTMLBody & "<ul style='list-style-type:disc;'>" & "<li>" & ActiveSheet.Cells(i + 5, 2).Value & " - " & Format(ActiveSheet.Cells(i + 5, 6).Value, "Currency") & " (" & Format(ActiveSheet.Cells(i + 5, 8).Value, "Currency") & " without budget or invoicing)." & "</li>" & "<ul>" & "<li>" & "Last billed " & ActiveSheet.Cells(i + 5, 10) & "." & "</li>" & "</ul>" & "</ul>"
        End If
      Next i
      .Body = .Body & " "
      .Body = .Body & " "
      .Body = .Body & "Thank you,"
      .Body = .Body & "Karen"
      .Display
   End With
End Sub


1 Ответ

0 голосов
/ 08 мая 2019

Чтобы создать многоуровневый список, вы можете просто создать еще один <ul>, вложенный под один из ваших <li> элементов. Вы можете повозиться с HTML здесь:

http://w3schools.com/code/tryit.asp?filename=G3UBZA6VM2WS

Чтобы контролировать стиль элемента списка для отдельного элемента <li>, укажите его type атрибут `.

Чтобы установить стиль элемента списка для всех элементов в списке, укажите атрибут style с соответствующим css, например ::

"<ul style='list-style-type:disc'>"

Обратите внимание на использование одинарных кавычек в строке в кавычках :)

Наконец, и теперь я подозреваю, что это была ваша проблема все время (стиль диска, кажется, по умолчанию в Outlook, поэтому вам, вероятно, не нужно указывать как таковой):

Вы не можете смешивать .Body и .HTMLBody. Вам нужно использовать один или другой. Если вы используете .Body, электронное письмо будет иметь обычный текст и не будет принимать или отображать HTML. Поэтому вы должны вместо этого преобразовать все ваши .Body назначения в соответствующий .HTMLBody. Не проверено, но должно быть что-то вроде этого:

With objEmail
    .To = "abc@xyz.com"
    .Subject = "TEST1: May 2019 Budget"
    .HTMLBody = "Kurt,"
    .HTMLBody = .HTMLBody & "<br>"
    .HTMLBody = .HTMLBody & "<p>The potential " & MonthName(Month(ActiveSheet.Range("A2"))) & " invoices are below.</p>"
    .HTMLBody = .HTMLBody & "<br>"
    For i = 1 To CaseCount
        If ActiveSheet.Cells(i + 5, 4).Value = "Yes" Then
            .HTMLBody = .HTMLBody & "<ul style='list-style-type:disc;'>" & "<li>" & ActiveSheet.Cells(i + 5, 2).Value & " - " & Format(ActiveSheet.Cells(i + 5, 6).Value, "Currency") & " (" & Format(ActiveSheet.Cells(i + 5, 8).Value, "Currency") & " without budget or invoicing)." & "</li>" & "<ul>" & "<li>" & "Last billed " & ActiveSheet.Cells(i + 5, 10) & "." & "</li>" & "</ul>" & "</ul>"
        End If
    Next i
    .HTMLBody = .HTMLBody & "<br><br>"
    .HTMLBody = .HTMLBody & "<p>" & "Thank you," & "</p>" 
    .HTMLBody = .HTMLBody & "<p>" & "Karen" & "</p>" 
    .Display
End With
...