Отправка писем через vba, но модули с функциями не были отправлены - PullRequest
0 голосов
/ 11 июля 2019

У меня есть некоторый код VBA, который отправляет лист Excel прямо через электронную почту Outlook. Я сохранил файл Excel в формате .xlsm, чтобы макросы и программы VBA работали на моем устройстве. Однако, когда получатель электронного письма открывает лист Excel, модули (которые содержат определенные пользовательские формулы) не отправляются. Мне было интересно, есть ли способ, которым я могу гарантировать, что модули будут отправлены по электронной почте, или в другом месте, где я могу разместить код функции, чтобы она автоматически отправлялась по электронной почте.

Заранее спасибо за помощь.

Я пытался искать в Интернете любые ситуации, но все, что я видел, это поместить функцию в модуль, и не было объяснения о том, как отправить модуль с электронной почтой, созданной через vba.

E-mail:

Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim OutApp As Object
Dim OutMail As Object

With Application
    .ScreenUpdating = False
    .EnableEvents = False
End With

Set Sourcewb = ActiveWorkbook

'Copy the ActiveSheet to a new workbook
ActiveSheet.Copy
Set Destwb = ActiveWorkbook

'Determine the Excel version and file extension/format
With Destwb
    If Val(Application.Version) < 12 Then
        'You use Excel 97-2003
        FileExtStr = ".xls": FileFormatNum = -4143
    Else
        'You use Excel 2007-2016
        Select Case Sourcewb.FileFormat
        Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
        Case 52:
            If .HasVBProject Then
                FileExtStr = ".xlsm": FileFormatNum = 52
            Else
                FileExtStr = ".xlsx": FileFormatNum = 51
            End If
        Case 56: FileExtStr = ".xls": FileFormatNum = 56
        Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
        End Select
    End If
End With

'    'Change all cells in the worksheet to values if you want
'    With Destwb.Sheets(1).UsedRange
'        .Cells.Copy
'        .Cells.PasteSpecial xlPasteValues
'        .Cells(1).Select
'    End With
'    Application.CutCopyMode = False

'Save the new workbook/Mail it/Delete it
TempFilePath = Environ$("temp") & "\"
TempFileName = "Part of " & Sourcewb.name & " " & Format(Now, "dd-mmm-yy h-mm-ss")

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

With Destwb
    .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
    On Error Resume Next
    With OutMail
        .to = Range("B61")
        .CC = ""
        .BCC = ""
        .Subject = "CS Equipment Pricebook"
        .Body = Range("B30:B40")
        .Attachments.Add Destwb.FullName
        'You can add other files also like this
        '.Attachments.Add ("C:\test.txt")
        .Send   'or use .Display
    End With
    On Error GoTo 0
    .Close savechanges:=False
End With

'Delete the file you have send
Kill TempFilePath & TempFileName & FileExtStr

Set OutMail = Nothing
Set OutApp = Nothing

With Application
    .ScreenUpdating = True
    .EnableEvents = True
End With

Функция:

Function username()
    username = Environ("Username")
End Function

Всякий раз, когда электронное письмо отправляется, модуль с функцией не отправляется.

1 Ответ

0 голосов
/ 11 июля 2019

Для правильной работы автоматически выполняющихся подпрограмм в Microsoft Excel они должны содержаться в модуле Visual Basic.

Вы должны вставить модуль Visual Basic в рабочую книгу, а затем поместить код в новый модуль.

Чтобы вставить модуль Visual Basic: - В обозревателе проектов в редакторе Visual Basic активируйте рабочую книгу, содержащую соответствующий код. - В меню «Вставка» выберите «Модуль». - После того, как новый модуль вставлен, вырежьте код из его исходного местоположения и вставьте его в модуль Visual Basic. Затем сохраните книгу.

См. Код VBA "за" рабочим листом или рабочей книгой может не работать в Excel для получения дополнительной информации.

Наконец, убедитесь, что все включено в вашу рабочую книгу, см. Где находится книга личных макросов Excel? .

P.S. Если вам нужно распространить свое решение на основе Office на несколько компьютеров, я бы предложил разработать надстройку на основе VSTO. Подробнее о них читайте в пошаговом руководстве : создайте свою первую надстройку VSTO для Excel .

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