#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» больше не выдает мне ошибку (извините, я не видел, что вы добавили это в первом комментарии). Новая проблема, хотя текстовое поле есть, но оно пустое… Я чувствую, что мне не хватает строки кода, чтобы указать, какой текст экспортировать. Есть идеи?