none
PPTの指定した位置にテキストボックスを表示 RRS feed

  • 質問

  • 環境とプログラムは下記URL参照してください。

    http://social.msdn.microsoft.com/Forums/vstudio/ja-JP/7e62c070-51e6-4301-baeb-1056d995d799/vbnet

    ■やりたい事
    ・パワーポイントの指定した位置にテキストボックスを表示
    例えば下記の位置にVBから表示したい。
    横位置 10 cm
    縦位置 5 cm


    下記のプログラムだと、表示する座標が、50,70になると思います。
    ただ、プログラムでの指定では「ポイント」単位です。
    Shapes.AddTextbox(1, 50, 70, 200, 100)

    この場合、ポイントからcmへの変換が必要なのでしょうか。
    また、別の方法があるのでしょうか。

    よろしくお願いします。
    • 編集済み zoro01 2013年9月24日 1:36
    2013年9月19日 0:00

すべての返信

  • こんな?

    Option Strict Off
    Module Module1
        Sub Main()
            Dim msoTrue = -1 'Microsoft.Office.Core.MsoTriState.msoTrue
            Dim msoFalse = 0 'Microsoft.Office.Core.MsoTriState.msoFalse
            Dim msoTextOrientationHorizontal = 1 'Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal
            Dim ppLayoutBlank = 12 ' Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutBlank=12
    
            Dim app = CreateObject("PowerPoint.Application") 'new Microsoft.Office.Interop.PowerPoint.Application()
            app.Visible = msoTrue
            Dim pre = app.Presentations.Add()
            Dim slides = pre.Slides
            Dim slide = slides.Add(1, ppLayoutBlank)
            Dim shapes = slide.Shapes
    
            Dim cmSlideWidth As Single 'スライドの幅(cm)
            Dim cmSlideHeight As Single 'スライドの高さ(cm)
            cmSlideWidth = PointToCM(pre.PageSetup.SlideWidth)
            cmSlideHeight = PointToCM(pre.PageSetup.SlideHeight)
    
    
            Dim ptLeft As Single
            Dim ptTop As Single
            Dim ptWidth As Single
            Dim ptHeight As Single
    
            ptLeft = CMToPoint(cmSlideWidth / 2 - 10) '用紙の中心から左に10センチ
            ptTop = CMToPoint(cmSlideHeight / 2 - 5) '用紙の中心から上に5センチ
            ptWidth = CMToPoint(5) '幅5cm
            ptHeight = CMToPoint(5) '高さ5センチ
    
            Dim shape1 = shapes.AddTextbox(msoTextOrientationHorizontal, ptLeft, ptTop, ptWidth, ptHeight)
            shape1.TextFrame.TextRange.Text = "ABCDEFG"
            shape1.Line.Visible = msoTrue
            shape1.Line.ForeColor.RGB = &HFF0000
    
            '触ると動くので設定しなおす
            shape1.Width = ptWidth
            shape1.Height = ptHeight
        End Sub
    
        ''' <summary>センチからポイントへ</summary>
        Function CMToPoint(ByVal cm As Single) As Single
            Dim inch As Single
            Dim pt As Single
            inch = cm / 2.54
            pt = inch * 72
    
            CMToPoint = pt
        End Function
    
        ''' <summary>ポイントからセンチへ</summary>
        Function PointToCM(ByVal pt As Single) As Single
            Dim inch As Single
            Dim cm As Single
            inch = pt / 72
            cm = inch * 2.54
    
            PointToCM = cm
        End Function
    End Module

    パワーポイントは用紙の概念が希薄でPaperSizeは無い。(ルーラーも中心からの距離になっている。)
    紙の端から何センチという要求ならSlideWidth,SlideHeightと希望する用紙の寸法とから余白を計算してください。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク zoro01 2013年9月24日 2:00
    • 回答としてマークされていない zoro01 2013年9月24日 2:29
    2013年9月20日 10:28