Экспорт текста из Excel в PowerPoint с помощью VBA

#excel #vba #text #export #powerpoint

#excel #vba #текст #экспорт #powerpoint

Вопрос:

Я пишу код VBA для создания PowerPoint из документа Excel. У меня открывается PowerPoint и экспортируется мой текст, но я сталкиваюсь с проблемой синтаксиса, потому что я хочу экспортировать текст, а не таблицу, растровое изображение, картинку и т. Д.

Я попробовал следующий синтаксис и столкнулся с ошибками.

Первый:

 slde.Shapes.PasteSpecial ppPasteBitmap 
 

(наряду со всеми другими возможными опциями «ppPaste …»)

Второй:

 slde.Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal, _
        Left:=1, Top:=1, Width:=100, Height:=100)  
 

Это дает мне ошибки с размерами, даже когда я скопировал чужой рабочий код, чтобы проверить его.

Есть ли лучший способ экспортировать текст? Спасибо.

Код:

 Sub ExporttoPPT()

    Dim ppt_app As New PowerPoint.Application
    Dim pre As PowerPoint.Presentation
    Dim slde As PowerPoint.Slide
    Dim shpe As PowerPoint.shape
    Dim wb As Workbook
    Dim Rng As Range
    
    Dim vSheet As String
    Dim vRange$
    Dim vWidth As Double
    Dim vHeight As Double
    Dim vTop As Double
    Dim vLeft As Double
    Dim vSlide_No As Long
    Dim expRng As Range
    
    Dim adminSh As Worksheet
    Dim cofigRng As Range
    Dim xlfile$
    Dim pptfile$
    
    Dim pptapp As Object
   
    
    Application.DisplayAlerts = False
    
    Set adminSh = ThisWorkbook.Sheets("PPTPage")
    Set cofigRng = adminSh.Range("Rngsheets")
    

    pptfile = adminSh.[pptpth]
    
    Set wb = ActiveWorkbook
    Set pre = ppt_app.Presentations.Open(pptfile)
    
    '---set variables
    For Each Rng In cofigRng
    
        With adminSh
            vSheet = .Cells(Rng.Row, 3).Value
            vRange$ = .Cells(Rng.Row, 4).Value
            vWidth = .Cells(Rng.Row, 5).Value
            vHeight = .Cells(Rng.Row, 6).Value
            vTop = .Cells(Rng.Row, 7).Value
            vLeft = .Cells(Rng.Row, 8).Value
            vSlide_No = Cells(Rng.Row, 9).Value
            Debug.Print vSheet
            Debug.Print vRange$
            Debug.Print vWidth
            Debug.Print vHeight
            Debug.Print vTop
            Debug.Print vLeft
            Debug.Print vSlide_No
        End With
        
    '---export to ppt
            
            wb.Activate
            Sheets(vSheet).Activate
            Set expRng = Sheets(vSheet).Range(vRange$)
            expRng.Copy
            
            Set slde = pre.Slides(vSlide_No)
            
            slde.Shapes.PasteSpecial ppPasteBitmap
            slde.Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal, _
            Left:=1, Top:=1, Width:=100, Height:=100)
            
            
            Set shp = slde.Shapes(1)
            
            With shp
                .Top = vTop
                .Left = vLeft
                .Width = vWidth
                .Height = vHeight
        
            End With
        
        Set shp = Nothing
        Set slde = Nothing
        
        
        Application.CutCopyMode = False
        Set expRng = Nothing
    Next Rng
    
    Set pre = Nothing
    
    
    'wb.Close False
    'Set wb = Nothing
    
Application.DisplayAlerts = True
End Sub
 

Комментарии:

1. Для прямого текста лучше использовать что-то вроде ActivePresentation. Слайды (1). Фигуры (1).Текстовый фрейм. TextRange.Text. Пожалуйста, опубликуйте свой код, чтобы мы могли видеть контекст.

2. В дополнение к запросу JohnK, пожалуйста, укажите точный текст сообщения об ошибке, которое вы получаете. Кроме того, что произойдет, если вместо этого вы используете Call slde. Фигуры. AddTextBox(Ориентация: = msoTextOrientationHorizontal, _ Слева:=1, Сверху:= 1, Ширина:= 100, Высота:= 100)

3. Для slde.shapes.pastespecial мой текст экспортируется в PowerPoint, но его нет в том месте на слайде и / или на слайде с номером, который я указал, чтобы он был включен. Я получаю комбинацию неправильного местоположения и номера слайда в зависимости от того, что я поставил после .вставить специальный. Для «(Ориентация: = msoTextOrientation Horizontal)» я получаю ошибку компиляции с надписью «Ожидается: =». Я опубликую свой код ниже для большего контекста и поиграю с ActivePresentation. Слайды (1)… Джон упомянул. Спасибо за помощь.

4. Либо удалите круглые скобки после AddTextBox, либо оставьте его как есть, но поместите CALL перед ним, как предложено.

5. Спасибо, Стив! Добавление «Call» больше не выдает мне ошибку (извините, я не видел, что вы добавили это в первом комментарии). Новая проблема, хотя текстовое поле есть, но оно пустое… Я чувствую, что мне не хватает строки кода, чтобы указать, какой текст экспортировать. Есть идеи?