Consulting

Results 1 to 4 of 4

Thread: Sleeper: Edit VBA code to let it automaticlly create Folder

  1. #1
    VBAX Newbie
    Joined
    Oct 2023
    Posts
    3
    Location

    Post Sleeper: Edit VBA code to let it automaticlly create Folder

    ood day all






    I have the below code wich is working totally perfect.






    which is take the worksheet and save it as pdf and xls format and before that the code ask me to specify the destination folder


    then the code attach both file on new outlook mail


    I need the code do do all the same but automaticlly create and select the distenation folder "C:\Users\qaroosya\Documents\2023" and create a folder for each month



    
    Sub Acreatepdf()
    
    Dim EmailSubject As String, EmailSignature As String
    
    
    Dim CurrentMonth As String, DestFolder As String, PDFFile As String
    
    
    Dim Email_To As String, Email_CC As String, Email_BCC As String
    
    
    Dim OpenPDFAfterCreating As Boolean, AlwaysOverwritePDF As Boolean, DisplayEmail As Boolean
    
    
    Dim OverwritePDF As VbMsgBoxResult
    
    
    Dim OutlookApp As Object, OutlookMail As Object
    
    
    Dim NewWB As Workbook
    
    
    Dim ActiveWS As Worksheet
    
    
    Dim Qaroos As String
    
    
    Qaroos = "WSX"
    
    
    CurrentMonth = ""
    
    
    Set ActiveWS = ActiveSheet
    
    
    Application.CalculateFullRebuild
    
    
    Application.ScreenUpdating = False
    
    
    Application.DisplayAlerts = False
    
    
    Application.EnableEvents = False
    
    
    ActiveSheet.PageSetup.PrintArea = "Qpmr"
    
    
    ' *****************************************************
    
    
    ' *****     You Can Change These Variables    *********
    
    
        EmailSubject = [SubMG]   'Change this to change the subject of the email. The current month is added to end of subj line
    
    
        OpenPDFAfterCreating = False    'Change this if you want to open the PDF after creating it : TRUE or FALSE
    
    
        AlwaysOverwritePDF = False      'Change this if you always want to overwrite a PDF that already exists :TRUE or FALSE
    
    
        DisplayEmail = True 'Change this if you don't want to display the email before sending.  Note, you must have a TO email address specified for this to work
    
    
        Email_To = "email******com"   'Change this if you want to specify To email e.g. ActiveSheet.Range("H1") to get email from cell H1
    
    
    
    
    
    
        Email_CC = [CCMG]
    
    
        Email_BCC = ""
    
    
    ' ******************************************************
    
    
        'Prompt for file destination
    
    
        With Application.FileDialog(msoFileDialogFolderPicker)
    
    
            If .Show = True Then
    
    
                DestFolder = .SelectedItems(1)
    
    
            Else
    
    
                MsgBox "You must specify a folder to save the PDF into." & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Must Specify Destination Folder"
    
    
                Exit Sub
    
    
            End If
    
    
        End With
    
    
        'Current month/year stored in H6 (this is a merged cell)
    
    
        CurrentMonth = Mid(ActiveSheet.Range("H6").Value, InStr(1, ActiveSheet.Range("H6").Value, " ") + 1)
    
    
        'Create new PDF file name including path and file extension
    
    
        PDFFile = DestFolder & Application.PathSeparator & [TitMG] & ".pdf"
    
    
        'If the PDF already exists
    
    
        If Len(Dir(PDFFile)) > 0 Then
    
    
            If AlwaysOverwritePDF = False Then
    
    
                OverwritePDF = MsgBox(PDFFile & " already exists." & vbCrLf & vbCrLf & "Do you want to overwrite it?", vbYesNo + vbQuestion, "File Exists")
    
    
                On Error Resume Next
    
    
                'If you want to overwrite the file then delete the current one
    
    
                If OverwritePDF = vbYes Then
    
    
                    Kill PDFFile
    
    
                    Kill Replace(PDFFile, ".pdf", ".xlsx")
    
    
                Else
    
    
                    MsgBox "OK then, if you don't overwrite the existing PDF, I can't continue." _
    
    
    & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Exiting Macro"
    
    
                    Exit Sub
    
    
                End If
    
    
            Else
    
    
                On Error Resume Next
    
    
                Kill PDFFile
    
    
                Kill Replace(PDFFile, ".pdf", ".xlsx")
    
    
            End If
    
    
            If Err.Number <> 0 Then
    
    
                MsgBox "Unable to delete existing file.  Please make sure the file is not open or write protected." _
    
    
    & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Unable to Delete File"
    
    
                Exit Sub
    
    
            End If
    
    
        End If
    
    
        'Create the PDF
    
    
        ActiveWS.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFile, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
    
    
    :=False, OpenAfterPublish:=OpenPDFAfterCreating
    
    
        Set NewWB = Workbooks.Add
    
    
        ActiveWS.copy Before:=NewWB.Sheets(1)
    
    
        NewWB.SaveAs Replace(PDFFile, ".pdf", ".xlsx")
    
    
        NewWB.Close
    
    
        'Create an Outlook object and new mail message
    
    
        Set OutlookApp = CreateObject("Outlook.Application")
    
    
        Set OutlookMail = OutlookApp.CreateItem(0)
    
    
        'Display email and specify To, Subject, etc
    
    
        With OutlookMail
    
    
            .To = Email_To
    
    
            .CC = Email_CC
    
    
            .BCC = Email_BCC
    
    
            .Subject = [SubMG]
    
    
            .Attachments.Add PDFFile
    
    
            .Attachments.Add Replace(PDFFile, ".pdf", ".xlsx")
    
    
            .HTMLBody = RangetoHTML(Sheets("Index").Range("AF564:AW632"))
    
    
            .Display
    
    
    Application.DisplayAlerts = True
    
    
    Application.EnableEvents = True
    
    
    If Err Then
    
    
          MsgBox "E-mail not created", vbExclamation
    
    
        Else
    
    
                MsgBox "E-mail successfully Created, You may display your Morning report from your Outlook for final check ... ", vbInformation
    
    
        End If
    
    
            If DisplayEmail = False Then
    
    
                 If Sheets("Index").Range("AG561").Value = "Timer" Then
    
    
                    Application.OnTime TimeValue("AI561").Value, Procedure:="MYcode"
    
    
                       Else
    
    
                End If
    
    
            End If
    
    
        End With
    
    
    ActiveSheet.Unprotect Qaroos
    
    
    
    
    
    
    If ActiveSheet.Range("Z3").Value = "S" Then
    
    
    
    
    
    
    For Each Pr In ActiveSheet.Pictures
    
    
           If Not Intersect(Pr.TopLeftCell, Range("K17:V33,K66:V82,K114:V130,K161:V178,K210:V226,K257:V273,K304:V320,K350:V366")) Is Nothing Then
    
    
            Pr.Delete
    
    
           End If
    
    
        Next Pr
    
    
    For Each Pr In ActiveSheet.Pictures
    
    
          If Not Intersect(Pr.BottomRightCell, Range("K17:V33,K66:V82,K114:V130,K161:V178,K210:V226,K257:V273,K304:V320,K350:V366")) Is Nothing Then
    
    
            Pr.Delete
    
    
           End If
    
    
        Next Pr
    
    
    Call histor
    
    
    Call seplit
    
    
    Call Updateuncoplatedjob
    
    
    Call Clearreport
    
    
    Call indexclear
    
    
    
    
    
    
    Sheets("DAILY OPS REPORT8").Select
    
    
    Application.ScreenUpdating = True
    
    
    ActiveSheet.Protect Qaroos, DrawingObjects:=False, Contents:=True, Scenarios:=True _
    
    
            , AllowFormattingCells:=True, AllowFormattingRows:=True, _
    
    
        AllowFormattingColumns:=False, AllowInsertingColumns:=False, _
    
    
        AllowInsertingRows:=False, AllowInsertingHyperlinks:=False, _
    
    
        AllowDeletingColumns:=False, AllowDeletingRows:=False, _
    
    
        AllowSorting:=False, AllowFiltering:=False, AllowUsingPivotTables:=False
    
    
    MsgBox (" " & ActiveSheet.Range("D1").Value & " Empty Morning report ready to use.")
    
    
    
    
    
    
     Else
    
    
    
    
    
    Call histor
    
    
    Call seplit
    
    
    Call Updateuncoplatedjob
    
    
    Call Clearreport
    
    
    Call indexclear
    
    
    Sheets("DAILY OPS REPORT8").Select
    
    
    Application.ScreenUpdating = True
    
    
    ActiveSheet.Protect Qaroos, DrawingObjects:=True, Contents:=True, Scenarios:=True _
    
    
            , AllowFormattingCells:=True, AllowFormattingRows:=True
    
    
        Application.ScreenUpdating = True
    
    
    MsgBox (" " & ActiveSheet.Range("D1").Value & " Empty Morning report ready to use")
    
    
    
    
    
    
    End If
    
    
    
    
    
    
    ThisWorkbook.Save
    
    
    
    
    
    
    End Sub
    
    
     Function RangetoHTML(Rng As Range)
    
    
    ' Working in Office 2000-2016
    
    
        Dim fso As Object
    
    
        Dim ts As Object
    
    
        Dim TempFile As String
    
    
        Dim TempWB As Workbook
    
    
        TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
    
    
        'Copy the range and create a new workbook to past the data in
    
    
        Rng.copy
    
    
        Set TempWB = Workbooks.Add(1)
    
    
        With TempWB.Sheets(1)
    
    
            .Cells(1).PasteSpecial Paste:=8
    
    
            .Cells(1).PasteSpecial xlPasteValues, , False, False
    
    
            .Cells(1).PasteSpecial xlPasteFormats, , False, False
    
    
            .Cells(1).Select
    
    
            Application.CutCopyMode = False
    
    
            On Error Resume Next
    
    
            .DrawingObjects.Visible = True
    
    
            .DrawingObjects.Delete
    
    
            On Error GoTo 0
    
    
        End With
    
    
        'Publish the sheet to a htm file
    
    
    With TempWB.PublishObjects.Add( _
    
    
    SourceType:=xlSourceRange, _
    
    
    Filename:=TempFile, _
    
    
    Sheet:=TempWB.Sheets(1).Name, _
    
    
    Source:=TempWB.Sheets(1).UsedRange.Address, _
    
    
    HtmlType:=xlHtmlStatic)
    
    
            .Publish (True)
    
    
        End With
    
    
        'Read all data from the htm file into RangetoHTML
    
    
        Set fso = CreateObject("Scripting.FileSystemObject")
    
    
        Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    
    
        RangetoHTML = ts.readall
    
    
        ts.Close
    
    
        RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
    
    
    "align=left x:publishsource=")
    
    
        'Close TempWB
    
    
        TempWB.Close SaveChanges:=False
    
    
        'Delete the htm file we used in this function
    
    
        Kill TempFile
    
    
        Set ts = Nothing
    
    
        Set fso = Nothing
    
    
        Set TempWB = Nothing
    
    
    End Function
    
    

  2. #2
    Knowledge Base Approver VBAX Wizard p45cal's Avatar
    Joined
    Oct 2005
    Location
    Surrey UK
    Posts
    5,970
    p45cal
    Everyone: If I've helped and you can't be bothered to acknowledge it, I can't be bothered to look at further posts from you.

  3. #3
    Moderator VBAX Wizard Aussiebear's Avatar
    Joined
    Dec 2005
    Location
    Queensland
    Posts
    5,512
    Location
    Cross posted in your previous thread, and still haven't learnt to not cross post without posting the links yourself.
    Remember To Do the Following....
    Use [Code].... [/Code] tags when posting code to the thread.
    Mark your thread as Solved if satisfied by using the Thread Tools options.
    If posting the same issue to another forum please show the link

  4. #4
    Knowledge Base Approver VBAX Wizard p45cal's Avatar
    Joined
    Oct 2005
    Location
    Surrey UK
    Posts
    5,970

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •