Отправить спецификацию c лист по электронной почте - PullRequest
1 голос
/ 17 июня 2020

Мне нужна небольшая помощь с кодом. У меня есть книга под названием Отчет о состоянии , которая содержит несколько листов внутри, и из них мне нужно отправить sheet8 (Called tables) по электронной почте. Я создал код, но он выдает ошибки. Я пытаюсь понять, в чем ошибка, но не могу ее исправить (недавно я начал изучать VBA).

Расположение файла на рабочем столе.

Это код, который у меня есть.

Option Explicit

    Sub EmailWithOutlook()
        Dim oApp As Object
        Dim oMail As Object
        Dim WB As Workbook
        Dim FileName As String
        Dim wSht As Worksheet
        Dim shtName As String

    Application.ScreenUpdating = False

    ActiveSheet.Copy
    Set WB = ActiveWorkbook

    FileName = WB.Worksheets(1).Name
    Kill "C:\Users\Default\Desktop" & "Status report.xlsm"
    On Error GoTo 0
    WB.SaveAs FileName:="C:\Users\Default\Desktop" & "Status report.xlsm"

    Set oApp = CreateObject("Outlook.Application")
    Set oMail = oApp.CreateItem(0)
    With oMail

        .To = "sleepyyx@gmail.com"
        .Subject = "Test workbook"
        .body = "Hello, could you please check workbook" & vbCrLf & vbCrLf & _
          "I attached you file"
        .Attachments.Add WB.FullName
        .Display
    End With

    WB.ChangeFileAccess Mode:=xlReadOnly
    Kill WB.FullName
    WB.Close SaveChanges:=False


    Application.ScreenUpdating = True
    Set oMail = Nothing
    Set oApp = Nothing
End Sub

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

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

Рассмотрите возможность использования переменной для обеспечения согласованности и в случае ее изменения, и убедитесь, что вы включили backsla sh между путем и именем файла.

FileName = WB.Worksheets(1).Name

Dim sFullFile As String
sFullFile = "C:\Users\Default\Desktop\" & FileName

If Dir(sFullFile) <> "" Then Kill sFullFile
WB.SaveAs FileName:=sFullFile

Следует также отметить, что если вы сохраняете его как XLSM, тогда исходным форматом также должен быть XLSM, иначе SaveAs выдаст ошибку, если вы не укажете формат файла.

Документация по перечислению XlFileFormat

0 голосов
/ 17 июня 2020

Перед тем, как убить файл в Kill "C:\Users\Default\Desktop\" & "Status report.xlsm", вам нужно проверить, существует ли файл:

~~> Проверить, существует ли файл

If Dir("C:\Users\Default\Desktop\" & "Status report.xlsm") <> "" Then
 Kill "C:\Users\Default\Desktop\" & "Status report.xlsm"
End If

И вы забываете backsla sh

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