Home > front end >  Delete text box that says XXXX and replace with new text box with different text for each slide
Delete text box that says XXXX and replace with new text box with different text for each slide

Time:01-26

Fairly long code here that I inherited. This code creates a title text box on each slide that says title = "[XXXXXX]".

I need to change the title for each slide, so for example, slide 1 needs to delete the [XXXXXX] and replace it with "Executive Summary". Slide 2 needs to replace the [XXXXXX] with "Borrower Characteristics". Slide 3 needs to replace "[XXXXXX]" with something else.

How do I adjust this code so that I can adjust the specific language needed for each individual slide?

Thanks!

'Create PowerPoint Final
Option Explicit

Dim title As String
    
Sub CopyChartsToPowerPoint()

    '########################
    ' Revised: Desc
    ' 2023_01_22: Add macro
    '########################
    
    '// excel variables/objects
    Dim wb As Workbook
    Dim source_sheet As Worksheet
    Dim chart_obj As ChartObject
    Dim i As Long, last_row As Long, tracker As Long
    
    '// powerpoint variables/objects
    Dim pp_app As PowerPoint.Application
    Dim pp_presentation As Presentation
    Dim pp_slide As Slide
    Dim pp_shape As Object
    Dim pp_slider_tracker As Long, n As Long

    
    Set wb = ThisWorkbook
    Set source_sheet = wb.Worksheets("portfolio_charts")
    
    Set pp_app = New PowerPoint.Application
    Set pp_presentation = pp_app.Presentations.Add
    
    pp_slider_tracker = 1
    n = 41
    title = "[XXXXXX]"
    
    last_row = source_sheet.Cells(Rows.Count, "A").End(xlUp).Row
    
   'Set pp_slide = pp_presentation.Slides.Add(pp_slider_tracker, ppLayoutBlank)
    Set pp_slide = pp_presentation.Slides.Add(pp_slider_tracker, ppLayoutCustom)
    
    For i = 1 To last_row
'        Stop
'        Debug.Assert i < 20
'
'        If i Mod 37 = 5 Or i Mod 37 = 9 Or i Mod 37 = 13 Or i Mod 37 = 17 _
'            Or i Mod 37 = 21 Or (i Mod 37 > 23 And i Mod 37 < 37) Or i Mod 37 = 0 Or (i Mod 37 = 1 And pp_slider_tracker > 1) Then
        If (i Mod n = 1 And pp_slider_tracker > 1) Or i Mod n = 5 Or i Mod n = 7 Or i Mod n = 10 Or i Mod n = 13 Or i Mod n = 16 Or i Mod n = 18 Or i Mod n = 22 Or i Mod n = 24 Or _
            (i Mod n > 27 Or i Mod n = 0) Then
        
            pp_slider_tracker = pp_slider_tracker   1
            Set pp_slide = pp_presentation.Slides.Add(pp_slider_tracker, ppLayoutBlank)
                    
        End If
        
        Set chart_obj = source_sheet.ChartObjects(source_sheet.Cells(i, "A").Value)
        chart_obj.Chart.ChartArea.Copy
                     
        'Set pp_shape = pp_slide.Shapes.PasteSpecial(ppPasteEnhancedMetafile)
        Set pp_shape = pp_slide.Shapes.Paste

        Select Case i Mod n
            
            '// four/three charts
            Case 1, 7, 10, 13, 18, 24
                Call position_chart_top_left(pp_shape)
                Call insert_title(pp_slide)
                Call insert_h_line_1(pp_slide)
                Call insert_h_line_2(pp_slide)
                Call insert_v_line_1(pp_slide)
            
            '// top right
            Case 2, 8, 11, 14, 19, 25
                Call position_chart_top_right(pp_shape)
            
            '// bottom left
            Case 3, 9, 12, 15, 20, 26
                Call position_chart_bottom_left(pp_shape)
            
            '// bottom right
            Case 4, 21, 27
                Call position_chart_bottom_right(pp_shape)
            
            '// two charts
            Case 5, 16, 22
                Call position_chart_top_left(pp_shape)
                Call position_chart_double_chart(pp_shape)
                Call insert_title(pp_slide)
                Call insert_h_line_1(pp_slide)
                Call insert_v_line_1(pp_slide)
                pp_shape.Height = 325
                
            '// two charts
            Case 6, 17, 23
                Call position_chart_top_right(pp_shape)
                Call position_chart_double_chart(pp_shape)
                Call insert_title(pp_slide)
                Call insert_h_line_1(pp_slide)
                Call insert_v_line_1(pp_slide)
                pp_shape.Height = 325
                
            Case 28 To n, 0
                Call position_chart_single_chart(pp_shape)
                Call insert_title(pp_slide)
                Call insert_h_line_1(pp_slide)
                pp_shape.Height = 375
        End Select
        
        Application.Wait (Now   TimeValue("00:00:01"))

    Next i

End Sub



Private Sub position_chart_top_left(ByVal pp_shape As Object)

        pp_shape.Left = 66
        pp_shape.Top = 86

End Sub

Private Sub position_chart_top_right(ByVal pp_shape As Object)

        pp_shape.Left = 510
        pp_shape.Top = 86
                
End Sub

Private Sub position_chart_bottom_left(ByVal pp_shape As Object)

        pp_shape.Left = 66
        pp_shape.Top = 306

End Sub

Private Sub position_chart_bottom_right(ByVal pp_shape As Object)

        pp_shape.Left = 510
        pp_shape.Top = 306

End Sub

Private Sub position_chart_single_chart(ByVal pp_shape As Object)

        pp_shape.Left = 127
        pp_shape.Top = 90
        pp_shape.Width = 706
        pp_shape.Height = 300
            
End Sub

Private Sub position_chart_double_chart(ByVal pp_shape As Object)

        pp_shape.Top = 90
        pp_shape.Height = 300
            
End Sub

Private Sub insert_title(ByVal pp_slide As Slide)

        Dim slide_title As Object
            
        Set slide_title = pp_slide.Shapes.AddTextbox(1, 34.36292, -2.670787, 900, 90)
        With slide_title
            .Height = 54
            .Left = 34.36292
            .Top = 15
            .Width = 190
            .TextFrame.TextRange.Text = title
            .TextFrame.TextRange.Font.Bold = True
            .TextFrame.TextRange.Font.Size = 20
            .TextFrame.TextRange.Font.Color = RGB(0, 133, 85)
        End With

End Sub

Private Sub insert_h_line_1(ByVal pp_slide As Slide)

        Dim line1 As Object
        
        Set line1 = pp_slide.Shapes.AddLine(beginx:=10, beginy:=57.6, endx:=924, endy:=57.6).Line
        With line1
            .Weight = 2
            .Parent.Left = 18
            .Parent.Top = 48
            .ForeColor.RGB = RGB(140, 140, 140)
            
            With .Parent.Shadow
                .Transparency = 0.6
                .Visible = True
                .Style = msoShadowStyleOuterShadow
            End With
        End With
            
End Sub

Private Sub insert_h_line_2(ByVal pp_slide As Slide)
            
            Dim line2 As Object
            
            Set line2 = pp_slide.Shapes.AddLine(beginx:=10, beginy:=57.6, endx:=924, endy:=57.6).Line
            With line2
                .Weight = 2
                .Parent.Left = 18
                .Parent.Top = 285
                .ForeColor.RGB = RGB(140, 140, 140)
                
                With .Parent.Shadow
                    .Transparency = 0.6
                    .Visible = True
                    .Style = msoShadowStyleOuterShadow
                End With
            End With
                
End Sub

Private Sub insert_v_line_1(ByVal pp_slide As Slide)
            
            Dim line3 As Object
            
            Set line3 = pp_slide.Shapes.AddLine(beginx:=10, beginy:=10, endx:=924, endy:=10).Line
            With line3
                .Weight = 2
                .Parent.Width = 430
                .Parent.Rotation = 90
                .Parent.Left = 264
                .Parent.Top = 268
                
                .ForeColor.RGB = RGB(140, 140, 140)
                
                With .Parent.Shadow
                    .Transparency = 0.6
                    .Visible = True
                    .Style = msoShadowStyleOuterShadow
                End With
            End With
            
End Sub

CodePudding user response:

Add a sheet named "title", assign it to wsTitle and put text in column A. Eg "Executive Summary" in A1,"Borrower" in A2 etc. Then in Sub insert_title() change line

'.TextFrame.TextRange.Text = title
.TextFrame.TextRange.Text = wsTitle.Cells(pp_slide.SlideIndex,"A")

You can put different languages in other columns and change "A" accordingly.

  • Related