Emailing หลายช่วงเป็นสิ่งที่แนบมาด้วยจาก VB รหัส

0

คำถาม

ฉันต้องใช้มาตรฐานบางอย่างรหัสจากอินเทอร์เน็ตเพื่อใช้เป็นปุ่มเพื่อสร้างอีเมลล์ในกเอาท์ลุ้คนกับสิ่งที่แนบมาด้วยนั่นมันเป็นช่วงในแผ่นงานที่ปุ่.รหัสทำงานผ่านมาได้อย่างสวยงา. ยังไงฉันขยายอายุของรหัสต้องให้แนบเป็นสิ่งที่แนบมาด้วยที่สองหรือมากกว่าช่วง? เข้ารหัสทางด้านล่าฉันเริ่มแล้วกำลังเริ่มการทำงานเป็นแหล่งที่สองและ Dest แต่เมื่อสูญเสียความมั่นใจเกี่ยวกับว่านี่มันควรจะสมัครไว้ด้วย

Private Sub CommandButton2_Click()

    Dim Source As Range
    Dim Source2 As Range
    Dim Dest As Workbook
    Dim Dest2 As Workbook
    Dim wb As Workbook
    Dim TempFilePath As String
    Dim TempFileName As String
    Dim FileExtStr As String
    Dim AutoPrint As String
    Dim FileFormatNum As Long
    Dim OutApp As Object
    Dim OutMail As Object

    Set Source = Nothing
    Set Source2 = Nothing
    On Error Resume Next
    Set Source = Range("A1:M47").SpecialCells(xlCellTypeVisible)
    Set Source2 = Range("AB1:AN47").SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If Source Is Nothing Then
        MsgBox "The source is not a range or the sheet is protected, please correct and try again.", vbOKOnly
        Exit Sub
    End If

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

    Set wb = ActiveWorkbook
    Set Dest = Workbooks.Add(xlWBATWorksheet)
    Set Dest2 = Workbooks.Add(xlWBATWorksheet)

    Source.Copy
    With Dest.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial Paste:=xlPasteValues
        .Cells(1).PasteSpecial Paste:=xlPasteFormats
        .Cells(1).Select
        Application.CutCopyMode = False
    End With
    
    If Range("AC6") <> "" Then
    Source2.Copy
    With Dest2.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial Paste:=xlPasteValues
        .Cells(1).PasteSpecial Paste:=xlPasteFormats
        .Cells(1).Select
        Application.CutCopyMode = False
    End With
    End If

    TempFilePath = Environ$("temp") & "\"
    TempFileName = "Selection of " & wb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")

    If Val(Application.Version) < 12 Then
        'You use Excel 97-2003
        FileExtStr = ".xls": FileFormatNum = -4143
    Else
        'You use Excel 2007-2016
        FileExtStr = ".xlsx": FileFormatNum = 51
    End If

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    AutoPrint = Range("Y6").Value

    With Dest
        .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
        On Error Resume Next
        With OutMail
            .to = Range("S6").Value
            .CC = Range("S3").Value
            If Range("T3").Value = "Enter bcc addresses manually here" Then
            .bcc = ""
            Else
            .bcc = Range("T3").Value
            End If
            .Subject = Range("V6").Value
            .Body = Range("U6").Value
            .Attachments.Add Dest.FullName
            'You can add other files also like this
            '.Attachments.Add ("C:\test.txt")
            If AutoPrint = "Yes" Then
            .Send   'or use .Display
            Else
            .Display
            End If
        End With
        On Error GoTo 0
        .Close savechanges:=False
    End With

    Kill TempFilePath & TempFileName & FileExtStr

    Set OutMail = Nothing
    Set OutApp = Nothing

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

End Sub
attachment excel outlook range
2021-11-23 18:53:40
1

คำตอบที่ดีที่สุด

1

ต่อไปนี้ได้โดยการสนับสนุนจากของฉันความคิดเห็นด้านบน:

Private Sub CommandButton2_Click()
    Dim OutApp As Object, AutoPrint
    Dim colAttachments As New Collection, fPath As String, ws As Worksheet, tm, p
    
    Set ws = ActiveSheet
    tm = Format(Now, "dd-mmm-yy h-mm-ss")
    
    'first attachment
    fPath = CreateAttachment(ws.Range("A1:M47"), _
                            "Selection1 of " & ws.Parent.Name & " " & tm)
    If Len(fPath) = 0 Then Exit Sub 'exit if there was a problem
    colAttachments.Add fPath
    
    If ws.Range("AC6") <> "" Then    'second attachment? Note the filename needs to be distinct...
        fPath = CreateAttachment(ws.Range("AB1:AN47"), _
                                 "Selection2 of " & ws.Parent.Name & " " & tm)
        If Len(fPath) = 0 Then Exit Sub 'exit if there was a problem
        colAttachments.Add fPath
    End If
        
    Set OutApp = CreateObject("Outlook.Application")
    AutoPrint = ws.Range("Y6").Value
    With OutApp.CreateItem(0)
        .to = ws.Range("S6").Value
        .CC = ws.Range("S3").Value
        If ws.Range("T3").Value = "Enter bcc addresses manually here" Then
            .bcc = ""
        Else
            .bcc = ws.Range("T3").Value
        End If
        .Subject = ws.Range("V6").Value
        .Body = ws.Range("U6").Value
        For Each p In colAttachments  'add each attachment from the collection
            .Attachments.Add p
            Kill p
        Next p
        If AutoPrint = "Yes" Then
            .Send
        Else
            .Display
        End If
    End With
      
End Sub

'create a file from the visible cells in `rng`
'  and return the path to the file
Function CreateAttachment(rng As Range, fName As String) As String
    Dim rngVis As Range, ws As Worksheet, ext, fPath As String
    'try to get a range with only visible cells
    On Error Resume Next
    Set rngVis = rng.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    
    If rngVis Is Nothing Then
        MsgBox "The source is not a range or the sheet is protected. " & _
        "Please correct and try again.", vbExclamation + vbOKOnly
    Else
        Application.ScreenUpdating = False
        Set ws = Workbooks.Add(xlWBATWorksheet).Sheets(1)
        rngVis.Copy
        With ws.Cells(1)
            .PasteSpecial Paste:=xlPasteColumnWidths '8
            .PasteSpecial Paste:=xlPasteValues
            .PasteSpecial Paste:=xlPasteFormats
            .Select
        End With
        Application.CutCopyMode = False
        ext = IIf(Val(Application.Version) < 12, ".xls", ".xlsx")
        fPath = Environ$("temp") & "\" & fName & ext
        ws.Parent.SaveAs fPath
        ws.Parent.Close False
        CreateAttachment = fPath
    End If
End Function
2021-11-24 05:51:35

ขอบคุณมากสำหรับในกรณีที่มากมายรายละเอียดในคำตอบของคุณ จริงคำถามพื้นฐาน:ฉันต้องพยายามจะให้แนบเป็นสิ่งที่แนบมาด้วยนี่กฎต้องเป็น ActiveX ปุ่มและรหัสดูเหมือนว่าจะตกหลุมที่เริ่มฟังก์ชัน. ฉันพูดถูกไหมที่คิดว่าที่ปุ่มจดจำเพียงแค่คนส่วนตัวย่อย/จบย่อยรหัสและบางอย่างฉันต้องการจะรวมฟังก์ชันมาเจอเรื่องแบบนี้เหรอ? ตอนนี้ฉันไม่สามารถบอกว่าจะให้รหัสกำลังทำงานหรือไม่...
Stephen Jay

ฟังก์ชันเป็นโทรมาจาก CommandButton2_Click ดังนั้นของคุณปุ่มเดียวที่ต้องการโทรนั้นย่อย
Tim Williams

FYI"หลงทาง"ไม่ใช่มาอธิบา-ถ้าคุณกำลังมีปัญหากับรหัสมันเสมอช่วยเพื่ออธิบายสิ่งที่เกิดขึ้น ถ้าคุณได้ข้อผิดพลาดเกิดขึ้นระหว่างอะไรเกิดข้อผิดพลาดข้อความไว้แล้วซึ่งสาเน้นหากคุณคลิก"การดีบั๊ก"?
Tim Williams

ถ้าหากผมวิ่งไปที่การดีบั๊ก,แฟ้มชั่วคราวยชื่อได้ถูกสร้างสบายดีแล้วฉันจะไปเวลาเกิดข้อผิดพลาด'-2147417856(80010100)':ปลั๊กอินอัตโนมัติเกิดข้อผิดพลาดของระบบโทรล้มเหลว ฉันไม่เห็นเป็นแถวเน้นเมื่อฉันได้ข้อผิดพลาดนี้ด้วย นี่มันในทางที่เกี่ยวข้องกับความจริงที่ว่ามันมีสามแยกออกคำสั่งปุ่มกำหนดไว้?
Stephen Jay

ฉันดั้งเดิมรหัสนั่นเดียวที่สร้างหนึ่งสิ่งที่แนบมาด้วยอยู่ CommandButton2 และฉันใส่รหัสของคุณ(กับบางมากง่ายอย่างเปลี่ยนแปลง)อยู่บ CommandButton3.
Stephen Jay

พยายาม commenting ออกมา Kill และดูว่ามันเปลี่ยนแปลงอะไรเลย ถ้าฉันไม่สามารถทดสอบเล็กน้อยกันทีหลัง
Tim Williams

ที่เดียวกันเกิดข้อผิดพลาด...ขอบคุณล่วงหน้าสำหรับดูที่นี้!
Stephen Jay

เป็นของคุณ ActiveX ปุ่มบนแผ่นงาน?
Tim Williams

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่