2016-11-27 5 views
0

다음 호 :PowerPoint (VBA 2010)의 표 형식 이해 (텍스트 크기 변경)

표 VBA에서 tbl로 선언합니다. PowerPoint에서 일부 테이블을 표시하려고합니다.

셀 텍스트가 너무 길면 셀 크기가 커지고 슬라이드 제한을 초과합니다. 나는 그것을 피하고 싶다. 텍스트 크기를 조정하기 만하면 텍스트가 작아 져서 셀 안에 들어갈 수 있기를 바랍니다. 즉, 셀 테이블 크기를 변경하면 안됩니다.

어떻게 하시겠습니까? 나는 시도했다 :

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

성공하지 못했다. 무엇이 잘못되었는지 말해 주시겠습니까? 어떻게 진행 하시겠습니까?

런타임 오류 '2147024809 (80070057)'

지정된 값이 범위를 벗어난 다음과 같이

오류 메시지이다.

답변

1

이것은 PowerPoint OM의 이상한 점 중 하나입니다. Shape 개체에는 AutoSize 속성을 포함하여 IntelliSense에 나열된 모든 속성이 있지만 테이블에서 참조 할 때 일부 속성을 사용할 수 없습니다. AutoSize는 그 중 하나입니다. enter image description here : 당신은 셀 내에서 커서를 놓고 PowerPoint에서하여 형식 모양 창을 열 경우 예를 들어, 3 개 크기 조정 라디오 버튼 모양 체크 박스에서 랩 텍스트뿐만 아니라 회색으로 표시되는 것을 볼 수 있습니다 프로그래밍 방식이 아닌 PowerPoint UI를 통해 표를 추가하여 만든 위의 예제에서이 코드로 셀 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

덕분에 다양한 지식에 대한 많은 자동 크기 조정이 (매우 놀라운) 작동하지 않는 것을 이해 :

이 코드는 당신을 위해 있다고한다. 상자를 사용하여 전에는 문제를 해결했습니다 (많은 작업 이었지만 모든 것을 형식화 할 수있었습니다). 당신의 전략에 관해서 좀 더 구체적으로 말씀해 주시겠습니까? 텍스트를 도입 한 후 높이를 고정시킨 다음에 무엇을해야합니까? 편지의 크기를 줄이기 위해? 또는 테이블의 높이가 슬라이드 바깥에있는 경우처럼 글꼴을 1 mm 줄입니다. 이 전략을 말하는거야? 거대한 테이블을 피하는 것과 같은 간단한 주제에 실제로 더 좋은 옵션이 없습니까? – Albert

+0

의미가 무엇인지 보여주기 위해 코드 예제를 추가했습니다. –

+0

답변을 많이 주셔서 감사합니다. 요점은 이해하지만 매우 까다로운 코드입니다. 상자를 사용하여 작동합니다. 상자, 숫자 행 및 열을 반복하는 테이블을 생성하는 함수를 생성하는 함수를 가지고, 모든 상자 이름을 정보를 할당 할 수 있습니다. 그것은 꽤 초보지만 작동합니다. 다시 한 번 감사드립니다. – Albert