Для VBA, как вы можете использовать оператор IF для отображения указанного диапазона c в качестве изображения для электронного письма? - PullRequest
1 голос
/ 08 января 2020

У меня есть модуль VBA, который я обнаружил, который отправляет электронную почту диапазона, отправленного в виде изображения. Я хочу использовать флажки, чтобы выбрать, какие диапазоны должны быть отправлены. Есть ли способ использовать флажки, которые, когда вы нажимаете кнопку, VBA захватывает диапазоны в виде изображения, а затем отображает их в теле письма?

Вот код, который отправляет по электронной почте весь лист, а не указанные диапазоны c.

Sub esendtable14()


Dim outlook As Object
Dim newEmail As Object
Dim xInspect As Object
Dim pageEditor As Object

Set outlook = CreateObject("Outlook.Application")
Set newEmail = outlook.CreateItem(0)

With newEmail
.To = "Example"
.CC = "Example"
.BCC = ""
.Subject = Sheet1.Range("G1").Text
.Body = ""
.display

Set xInspect = newEmail.GetInspector
Set pageEditor = xInspect.WordEditor

Sheet17.Range("A1:M212").Copy


pageEditor.Application.Selection.Start = Len(.Body)
pageEditor.Application.Selection.End = pageEditor.Application.Selection.Start
pageEditor.Application.Selection.PasteAndFormat (wdFormatPlainText)
.display
Set pageEditor = Nothing
Set xInspect = Nothing
End With

Set newEmail = Nothing
Set outlook = Nothing

End Sub

Диапазон данных, который в случае истинности будет выглядеть как «A1: H12», «A13: H24», «A25: H36». Иногда не все диапазоны используются, и я бы предпочел, чтобы они не отображались в электронном письме. Заранее спасибо!

1 Ответ

2 голосов
/ 08 января 2020

Это возможно. Вот один из способов сделать это.

  1. Поставьте флажок на своем листе. Убедитесь, что этот флажок относится к типу «Элементы управления ActiveX», а не к типу «Элемент управления формы». Объекты ActiveX имеют больше хуков обратно в VBA и будут работать лучше всего для такого рода вещей.

    enter image description here

  2. Перейдите к вашему VBA и дважды щелкните на рабочем листе, где находится ваш флажок, чтобы кодовая страница рабочего стола вышла на передний план. Вверху есть два поля, где мы можем выбрать события. Эти события будут запускать код, когда событие происходит. Выберите Checkbox1 (тот, который мы только что добавили) и Click. (Click на самом деле будет значением по умолчанию, поэтому вам не нужно выбирать его).

  3. Вы должны на этом этапе автоматически создается подпрограмма с именем «Checkbox1_Click ()». Каждый раз, когда вы нажимаете на этот флажок, чтобы установить или снять этот флажок, этот код будет срабатывать. Итак, давайте поместим условие test / if, чтобы увидеть, привело ли флажок к щелчку, вызвавшему этот код.

    Private Sub CheckBox1_Click()
        'check if checked
        If CheckBox1.Value = True Then
    
    
        End If
    End Sub
    
  4. Теперь мы собираемся изменить вашу подпрограмму для добавления входного параметра. Это параметр, который мы отправим в эту подпрограмму при вызове. Мы хотим отправить вашей подпрограмме диапазон, который мы хотим распечатать.

    а. Сначала добавьте параметр в определение подпрограммы:

        Sub esendtable14(SendRange As Range)
    

    b. Затем измените бит кода, где вы указываете диапазон для использования этого параметра вместо

    , измените:

        Sheet17.Range("A1:M212").Copy
    

    на:

        SendRange.Copy
    
  5. Go вернитесь к процедуре Checkbox1_Click() и вызовите подпрограмму, передавая ее в любом диапазоне, указанном в вашей электронной почте:

    Private Sub CheckBox1_Click()
        'check if checked
        If CheckBox1.Value = True Then
            Call esendtable14(Sheet17.Range("A1:M212"))
        End If
    End Sub
    

Теперь просто следуйте этим шагам для каждого дополнительного флажка / диапазона Вы хотите добавить.


Кроме того, тест, чтобы увидеть, установлен ли флажок, написан немного неуклюже. CheckBox1.Value вернет True или False, и это все, что нужно If, поэтому = True является излишним. Это можно переписать как

 If CheckBox1.Value Then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...