読者です 読者をやめる 読者になる 読者になる

Powerpoint VBAを使おう!

Powerpoint VBAやExcelのVBAで遊んでいます。Word VBAも始めました。

PowerpointVBAでExcelを操作する。

yahooやgooglepowerpoint vba を検索します。

すると,Excel VBAPowerpointを操作するという話がほとんど。

みんなが望んているのは本当にそれだろうか。

少なくともわたしはそれを探してこんな検索してないけどなーと。

くやしかったので,逆をすることを書いてみます。

Option Explicit

Sub Excelデータの取り込み()
    Dim TSlide As Slide: Set TSlide = ActivePresentation.Slides(1)
    
    'パスワードもどき
    Dim strPass As String
    strPass = InputBox("パスワードを半角英数字で入力して下さい。") '気持ちそれっぽく
    If strPass <> "mondai" Then Exit Sub
    
    'ファイルを開きます
    Dim FD As FileDialog
    Dim SelectedFile As Variant
    Dim i As Byte
    
    Set FD = Application.FileDialog(msoFileDialogOpen)
    DoEvents
    With FD
        .Title = "問題を取り込むExcelブックを指定してください。"
        With .Filters
            .Clear
            .Add "Excelブック", "*.xls; *.xlsx; *.xlsm", 1
            
        End With
        .InitialFileName = ActivePresentation.Path & "\"
        .InitialView = msoFileDialogViewList
        If .Show = True Then
            Set SelectedFile = .SelectedItems
        End If
    End With
    If FD.SelectedItems.Count = 0 Then Exit Sub
    
    '素早くオブジェクト変数に放り込む
    Dim objXlapp As Object: Set objXlapp = CreateObject("Excel.Application")
    Dim objXlbook As Object: Set objXlbook = objXlapp.workbooks.Open(SelectedFile(1))
    
    Dim lngSheetsuu As Long
    lngSheetsuu = objXlbook.worksheets.Count
    
    Dim shpTable As Shape: Set shpTable = TSlide.Shapes.AddTable(lngSheetsuu, 2)
    Dim xlSht As Object
    For i = 1 To lngSheetsuu
        Set xlSht = objXlbook.worksheets(i)
        
        shpTable.Table.Cell(i, 1).Shape.TextFrame.TextRange = xlSht.Name
        shpTable.Table.Cell(i, 2).Shape.TextFrame.TextRange = xlSht.Range("a1").Value
    Next
    
End Sub

ちょっといらないこともやってます。

    'パスワードもどき
    Dim strPass As String
    strPass = InputBox("パスワードを半角英数字で入力して下さい。") '気持ちそれっぽく
    If strPass <> "mondai" Then Exit Sub

なにも知らない人にはこれでも,十分に効く。

隠す気は無いので,コードに保護かけたりわたしはしないんですけど,すぐには触れないように,というときに使います。

このコードを使うとこうなります。
f:id:chemiphys:20170113213436g:plain

f:id:chemiphys:20170113214121p:plain
ファイルダイアログとかわたしも得意ではないんですが,十分便利なもの。

そして,開いたものをすぐオブジェクト変数に放り込んで,Workbookなどに手軽にアクセスできるようにすれば,

ExcelVBAが扱える人ならいくらでもコードが書ける。

けっこう楽です。

問題などを入力するときはExcelが圧倒的に楽なので,あちらで問題データを作って,

Powerpointに流し込むときに,このコードを切り貼りすれば,十分いけると思われます。