2016-11-27 4 views
0

Следующая проблема:Понимание формата таблиц в PowerPoint VBA (2010) (размер текста в ячейке)

Заявляю TBL как таблицу в VBA. Я хочу показать некоторые таблицы в PowerPoint.

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

Как вы это сделаете? Я пробовал:

ppPres.Slides(NumSlide).Shapes(NumShape).Table.Columns(col).Cells(1).Shape.TextFrame2.AutoSize = msoAutoSizeTextToFitShape 

не имеет успеха. Не могли бы вы рассказать мне, что случилось, и как вы продолжите?

Сообщение об ошибке выглядит следующим образом: ошибка

Run-Time '2147024809 (80070057)'

Указанное значение находится вне допустимого диапазона.

ответ

1

Это одна из странностей PowerPoint OM. Объект Shape имеет все свойства, перечисленные IntelliSense, включая свойство AutoSize, но при ссылке в таблице некоторые свойства недоступны. AutoSize является одним из них. Например, если вы поместите курсор в ячейку и открыть в Формат Форма панели в PowerPoint, вы можете увидеть, что 3 Autosize радио кнопки неактивны, а также Wrap текста в форме флажком: enter image description here В приведенном выше примере, который был создан путем добавления таблицы через интерфейс PowerPoint, а не программно, я затем скопировал текст из ячейки 2,1 в 1,2 с помощью этого кода, и ячейка не изменила ширину, но изменила высоту, потенциально заставляя стол от дна слайда:

ActiveWindow.Selection.ShapeRange(1).Table.Cell(1,2).Shape.TextFrame.TextRange.Text=_ 
ActiveWindow.Selection.ShapeRange(1).Table.Cell(2,1).Shape.TextFrame.TextRange.Text 

Если это это, что вы пытаетесь контролировать, вы должны сделать это вручную в коде, просмотрев ячейку таблицы и/или высоту таблицы после вставки текста и уменьшив размер шрифта итеративно и перепроверяя каждый уровень сокращения, чтобы увидеть, все ли таблицы из области слайдов.

Этот код делает это для вас:

Option Explicit 

' ======================================================================= 
' PowerPoint Subroutine to iteratively reduce the font size of text 
' in a table until the table does not flow off the bottom of the slide. 
' Written By : Jamie Garroch of YOUpresent Ltd. http://youpresent.co.uk/ 
' Date : 05DEC2016 
' Inputs : Table object e.g. ActiveWindow.Selection.ShapeRange(1).Table 
' Outputs : None 
' Dependencies : None 
' ======================================================================= 
Sub FitTextToTable(oTable As Table) 
    Dim lRow As Long, lCol As Long 
    Dim sFontSize As Single 
    Const MinFontSize = 8 
    With oTable 
    Do While .Parent.Top + .Parent.Height > ActivePresentation.PageSetup.SlideHeight 
     For lRow = 1 To .Rows.Count 
     For lCol = 1 To .Columns.Count 
      With .Cell(lRow, lCol).Shape 
      sFontSize = .TextFrame.TextRange.Font.Size 
      If sFontSize > MinFontSize Then 
       .TextFrame.TextRange.Font.Size = sFontSize - 1 
      Else 
       MsgBox "Table font size limit of " & sFontSize & " reached", vbCritical + vbOKOnly, "Minimum Font Size" 
       Exit Sub 
      End If 
      End With 
      ' Resize the table (effectively like dragging the bottom edge and allowing PowerPoint to set the table size to the text. 
      .Parent.Height = 0 
     Next 
     Next 
    Loop 
    End With 
End Sub 
+0

Спасибо большое за information.I понял, что авторазмер не работает (очень удивительно). Я решил проблему прежде, делая коробки (это была большая работа, но я мог форматировать абсолютно все). Что касается вашей стратегии, не могли бы вы быть более конкретными? вы подразумеваете фиксацию высоты после ввода текста, и что тогда? уменьшая размер букв до чего? или вы имеете в виду, делая что-то вроде, если высота стола находится за пределами слайда, а затем уменьшите шрифт 1 мм. вы имеете в виду эту стратегию? На самом деле нет лучшего варианта в такой простой теме (избегая огромных таблиц? – Albert

+0

Я добавил пример кода, чтобы продемонстрировать, что я имел в виду. –

+0

Большое спасибо за ваш ответ. Я понимаю вашу точку зрения, но это очень требовательный код. работа с ящиками.У меня есть функция, которая генерирует ящик, функцию, которая генерирует таблицу (итерирование числа строк и столбцов), я называю каждую ячейку, поэтому я могу назначить информацию. Это довольно рудиментарно, но она работает. – Albert

Смежные вопросы