2016-01-20 3 views
0

Итак, я пытаюсь получить таблицу, удаленную из PowerPoint, которая открывается с помощью VBa, и я не могу заставить ее работать. Я пробовал несколько вещей, но они никогда не имеют никакого эффекта или обычно просто дают мне ошибку.Как удалить таблицу в powerpoint с помощью VBa?

До сих пор я получил следующее, которое открывает конкретную точку питания и копирует в определенную таблицу на первый слайд. Мне действительно хотелось бы удалить таблицу, которая уже существует, и заменить ее на новую.

Как бы я это сделал? Код ниже:

Sub ExcelRangeToPowerPoint() 

'PURPOSE: Copy/Paste An Excel Range Into a New PowerPoint Presentation 

Dim rng As Excel.Range 
Dim PowerPointApp As PowerPoint.Application 
Dim myPresentation As PowerPoint.Presentation 
Dim mySlide As PowerPoint.Slide 
Dim myShapeRange As PowerPoint.Shape 

'Copy Range from Excel 
Set rng = ThisWorkbook.ActiveSheet.Range("Table1[#ALL]") 

'Create an Instance of PowerPoint 
On Error Resume Next 

'Is PowerPoint already opened? 
    Set PowerPointApp = GetObject(class:="PowerPoint.Application") 

'Clear the error between errors 
    Err.Clear 

'If PowerPoint is not already open then open PowerPoint 
    If PowerPointApp Is Nothing Then Set PowerPointApp = CreateObject(class:="PowerPoint.Application") 

'Handle if the PowerPoint Application is not found 
    If Err.Number = 429 Then 
    MsgBox "PowerPoint could not be found, aborting." 
    Exit Sub 
    End If 

On Error GoTo 0 

'Make PowerPoint Visible and Active 
PowerPointApp.Visible = True 
PowerPointApp.Activate 

'Create a New Presentation 
Set myPresentation =   PowerPointApp.Presentations.Open("Y:\Projects\VBa\vbatest2.pptx") 

'Add a slide to the Presentation 
Set mySlide = myPresentation.Slides.Item(1) 

'Delete current table in presentation 
'ActivePresentation.Slides(1).Shapes(1).Delete 

'Copy Excel Range 
rng.Copy 

'Paste to PowerPoint and position 
mySlide.Shapes.PasteSpecial DataType:=ppPasteSourceFormatting 
Set myShapeRange = mySlide.Shapes(mySlide.Shapes.Count) 

'Set position: 
    myShapeRange.Left = 20 
    myShapeRange.Top = 100 
    myShapeRange.Height = 400 
    myShapeRange.Width = 900 

'Clear The Clipboard 
Application.CutCopyMode = False 

End Sub 

ответ

1
myPresentation.Slides(1).Shapes(1).Delete 

Место код выше только после

Set mySlide = myPresentation.Slides.Item(1) 

Когда я использовал это, он удалил таблицу из моей PowerPoint, но это была только таблица на слайде, вам может потребоваться изменить число в фигурах, чтобы заставить вас работать на вас. Я также не знаю, как это будет справедливо, будет продолжаться использование, вам, возможно, придется продолжать менять номер.

Я использовал This link , чтобы узнать, как удалить элементы из PowerPoint

ActivePresentation.Slides(2).Shapes(5).Table.Rows(3).Delete 

ли origonal код с сайта, связанного и был адаптирован методом проб и ошибок

This link Объясняет форм немного больше , Надеюсь, поможет. В базовом обзоре он основно говорит, что в Powerpoint большинстве деталей вы можете войти в него, называются формы

Если вы хотите, чтобы я ничего объяснять дальше просто оставить комментарий, и я постараюсь сделать так

+1

Это работало, только убедитесь, что установлены Формы (НОМЕР) Правильное значение для таблицы. Благодаря! –

1

Try вызова этой функции, чтобы удалить все таблицы из указанного слайда:

Option Explicit 

' Deletes all tables from the specified slide (table shapes and tables within placeholders) 
' Returns the number of tables deleted 
' Written by Jamie Garroch of YOUpresent Ltd. (http://youpresent.co.uk) 
Public Function DeleteTablesFromSlide(mySlide As PowerPoint.Slide) As Long 
    Dim lCntr As Long 
    Dim lTables As Long 
    ' Count backwards when deleting items from a collection 
    For lCntr = mySlide.Shapes.Count To 1 Step -1 
    With mySlide.Shapes(lCntr) 
     Select Case .Type 
     Case msoTable: .Delete: lTables = lTables + 1 ' msoTable = 19 
     Case msoPlaceholder ' msoPlaceholder = 19 
      If .PlaceholderFormat.ContainedType = msoTable Then .Delete: lTables = lTables + 1 
     End Select 
    End With 
    Next 
    DeleteTablesFromSlide = lTables 
End Function 

Вызов с:

DeleteTablesFromSlide mySlide