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

もめんの格闘日記

主にPowerPointを中心としたPCのTips的なものを書いていく予定です。

【PowerPointマクロ】名前を付けて保存するダイアログを開く

今回はPowerPointで名前を付けて保存するダイアログを開くマクロを紹介したいと思います。

~ダイアログとは、ファイルを保存するときにフォルダや名前を決めるときのウィンドウのことです。

名前を付けて保存はSaveAsでもできますが、ダイヤログは開きません。

ダイヤログを開くにはFileDialogを使います。保存以外にもファイルを開くときとかにも使えます。

では早速コードをどうぞ。

(PowerPoint2010で操作確認しています)

 

名前を付けて保存するダイアログを開くマクロ

Sub sample()
    Dim dlg As FileDialog
    Set dlg = Application.FileDialog(Type:=msoFileDialogSaveAs)


    If (dlg.Show = True) Then
      dlg.Execute
    End If
End Sub

実際の動作としては.Showのタイミングでダイヤログが開きます。

.Executeがないと保存ボタンを押しても保存されません。

保存のボタンが押されるとIf文の条件にかかり、.Executeで保存されます。

 

名前を付けて保存ダイヤログで表示される初期フォルダ、ファイル名を変更するマクロ

ダイヤログで表示される初期フォルダを指定することもできます。

Sub sample()

    Dim dlg As FileDialog
    Set dlg = Application.FileDialog(Type:=msoFileDialogSaveAs)
    
    dlg.InitialFileName = "C:\data"
    
    If (dlg.Show = True) Then
      dlg.Execute
    End If

End Sub

アンダーラインのある行の.InitialFileNameで初期フォルダを指定できます。

その名の通り初期ファイル名も指定できます。

Sub sample()

    Dim dlg As FileDialog
    Set dlg = Application.FileDialog(Type:=msoFileDialogSaveAs)
    
    dlg.InitialFileName = "C:\週報" & Format(Date, "yymmdd")
    
    If (dlg.Show = True) Then
      dlg.Execute
    End If

End Sub

これでフォルダ、ファイル名も指定できます。

学生のとき所属ゼミの週報はPowerPointで行っていたので、Dateを使って上記のようなファイル名を指定していれば、楽だったのかも。

Dateはその名の通り、日付を返す関数。

Formatは1つ目の引数の表示形式を指定する関数で、この場合は日付が161201のように入ります。

yyyymmddとすると20161201になります。

様々な使い方ができる関数でして、詳しく知りたい方はformat VBA とかでググってみて下さい。

 

個人的には、初期フォルダ、ファイル名を指定できるのが、気に入っています。

FileDialogは他の使い方があって、まだまだ奥が深いので、また勉強したら記事にします。

今回はこれで終わりです。

ありがとうございました。

 

【PowerPointマクロ】図の縦横比固定を解除する

PowerPointで図やオートシェイプの縦横比固定を解除するマクロを紹介します。

コードは以下です。

(PowerPoint2010で動作確認してます)

 

縦横比の固定を解除するマクロ

Sub sample()
  ActiveWindow.Selection.ShapeRange.LockAspectRatio = msoFalse
End Sub

これで選択しているシェイプの縦横比が固定されなくなります。

 

次は全スライドの全シェイプの縦横比が固定されなくなくマクロです。

Sub sample()
 
  Dim sld As Slide
  Dim shp As Shape
 
  For Each sld In ActivePresentation.Slides
    For Each shp In sld.Shapes
      shp.LockAspectRatio = msoFalse
    Next shp
  Next sld
 
End Sub

 

縦横比が固定された場合の幅と高さ

ここからは、ちなみにって感じの内容になります。

 

オートシェイプの図形は初めから縦横比は固定されていません。

挿入したJPEG等の図は初めから縦横比が固定されています。

 

縦横比が固定されたシェイプの大きさをマクロ上で変えた場合、最後に変更した項目に引っ張られます。

例えば次のマクロでは元々の大きさが高さ10cm×幅20cmの場合は、幅(Width)が最後に変更されているので、5cm×10cmになります。

Sub sample()
  With ActiveWindow.Selection.ShapeRange
    .LockAspectRatio = msoTrue
    .Height = 20 * 72 / 2.54
    .Width = 10 * 72 / 2.54
  End With
End Sub

*72/2.54はcmをpixelに換算するやつです。

 

今回は以上です。

ありがとうございました。

 

 

スライドの向きを固定するアドイン

スライドの向きを変えるマクロ、スライドのサイズを変えるマクロについて書いたので、スライド向きとサイズをいつでも一定にするアドインについて書きます。

PowerPointのスライドを横向き・縦向きに変える方法とマクロ - もめんの格闘日記

PowerPointのスライドのサイズを変える方法とマクロ - もめんの格闘日記

 

PowerPointはデフォルトのスライドの向きが横向き、サイズが"画面に合わせる"になっているので、いつでもA4横で使っている場合は新しいプレゼンテーションを開く度にサイズを変える必要があります。

A4縦で使ってたらもっとめんどうです。

 

リボンのカスタマイズする方法を使うとPowerPointを開いたときに向きやサイズを変えることができます。

  • リボンをカスタマイズするときのcustomUI.xml中に初期値を設定するonLoadってのを入れて、それで参照する関数の中にスライドの向きとかサイズを定義します。
  • そして、そのマクロが書かれているPowerPointをアドイン化して、アドインを読み込む。
  • するとPowerPointを開いたときに自動で向きとかを変更してくれます。

なんのこっちゃらと思う方は、参考にさせて頂いたページを参照下さい。

[PowerPoint]ドキュメントを開いたときに自動的にマクロを実行する | 初心者備忘録

 

一応僕も過去記事があるので参考にどうぞ。

マクロを実行するボタンを追加する方法(その1) - もめんの格闘日記

PowerPointファイルのアドイン化 - もめんの格闘日記

 

custom.xml

<?xml version="1.0" encoding="utf-8"?>
<customUI onLoad="sample" xmlns="http://schemas.microsoft.com/office/2006/01/customui">

 

上のonLoadの後の""に記述する関数名とVBAの関数名を同じにして下さい。

VBA

Public Sub sample(ribbon As IRibbonUI)
  ActivePresentation.PageSetup.SlideOrientation = msoOrientationHorizontal
  ActivePresentation.PageSetup.SlideSize = ppSlideSizeA4Paper
  MsgBox "A4横にしました"
End Sub

このcustomUI.xmlVBAを記述したPowerPointをアドイン(.ppam)として保存して下さい。

そして、"開発"タブの"アドイン"ボタンからアドインを読み込む。

そのとき"A4横にしました"とメッセージボックスが表示されればOKです。

"A4横にしました"ってのは確認用なので、鬱陶しければ消して、再度アドインとして保存して下さい。

あ、アドインを上書きするときは、アドインのチェックをはずしてからして下さい。

 このアドインを読み込めば、新しいプレゼンテーションを開いてもA4横になっているはずです。

msoOrientationHorizontalをmsoOrientationVerticalにすれば縦向きになります。

 

これでいつでもA4で表示されるっーー!

って思ったのですが、落とし穴が。。。

使ってみてわかったのですが、これはPowerPointを起動したときだけマクロが動きます。

PowerPointを開いている状態で新規プレゼンテーションを開いてもA4にはなりませんでした。。。

な。。んだ。。。と。。。

 

悲しいことに、使い勝手はそこまでよくないですが、ちょっとだけサイズ変更の煩わしさから解消されると思います。

うーむ、残念。

 

今回はこれで終わりです。

よこくわからないことがあればコメント下さい。

ありがとうございました。

PowerPointのスライドのサイズを変える方法とマクロ

この前はスライドの向きを変える方法を書いたので、今日はスライドのサイズを変える方法を書きます。

PowerPointのスライドを横向き・縦向きに変える方法とマクロ - もめんの格闘日記

 

PowerPointでの操作方法だけだと短いので、マクロも書きます。

コードが見たい人は後半から見て下さい。ではPowerPoint上での方法から。

(PowerPoint2010で操作確認してます。)

 

スライドのサイズを変える方法

  • "デザイン"タブ→"ページ設定"をクリックするとページ設定ウィンドウが開く
  • "スライドのサイズ指定"のドロップダウンリストの中にA4、B5とかよく使うサイズが入っています
  • 幅と高さを詳細に決めたいときはその下の幅と高さで細かく決めれます

f:id:momen40:20161124191149j:plain

同じウィンドウ内でスライドの縦向きと横向きも変えれます。

スライドのサイズは、おそらくデフォルトでは"画面に合わせる"になっていて、縦横比はディスプレイの大きさに依存していると思います。

僕はA4サイズで使うことが多いので、新しくプレゼンテーション開くと"画面に合わせる"になっていて毎回変更するのがめんどうです。

今度、勝手にA4サイズに変更するアドインについて書くつもりです。

 

ちなみにページ設定ウィンドウ左下にある"スライド開始番号"を0にすると1枚目のスライドのページ番号が0になります。

そうすると1枚目はタイトルのスライドで2枚目のページ番号を1にしたい!ってときに使えます。

それ以外の活用方法を僕は知りません。

お次はマクロです。

 

スライドのサイズを変えるマクロ

マクロのコードです。

Sub sample()
ActivePresentation.PageSetup.SlideSize = ppSlideSizeA4Paper
End Sub

これでスライドのサイズがA4になります。

 

Sub sample()
ActivePresentation.PageSetup.SlideWidth = 27.51 * 72 / 2.54
ActivePresentation.PageSetup.SlideHeight = 19.05 * 72 / 2.54
End Sub

これでスライドの幅と高さを自由に決めれます。

これもA4と同じ大きさになります。

*72/2.54ってのはcmをマクロ上の大きさ(pixel)への換算するやつです。

そんなに詳しくないけど、一応過去記事あります。

PowerPointマクロ上での長さ(pixel)とcmを換算する方法 - もめんの格闘日記

 

 今回はこんな感じです。

なんか自分の過去記事貼るの恥ずかしい。

終わり、ありがとうございました。

PowerPointのスライドを横向き・縦向きに変える方法とマクロ

今回はスライドの向きを横向き、縦向きに変更する方法を書きます。

それだけだと記事にならないのでスライドの向きを変えるマクロについても書きます。

ではさっそくPowerPoint上での変更方法からいきます。

マクロ見たい人は後半から見て下さい。

(PowerPoint2010で動作確認してます)

 

 

スライドの向きを変える方法

スライドの向きを変えるには"デザイン"タブの"スライドの向き"で縦と横を選択すれば変更できます。

f:id:momen40:20161123225510j:plain

これだけです。PowerPoint2007より前のバージョンでも、どこかにページ設定ってのがあったと思います。。。

次はマクロです。

 

 

スライドの向きを変えるマクロ

マクロのコードは以下です。

Sub sample()
ActivePresentation.PageSetup.SlideOrientation = msoOrientationVertical
End Sub

これでスライドが縦向きになります。

msoOrientationVerticalをmsoOrientationHorizontalにすると横向きになります。

 

今回は以上です。

この記事を書いてて、"いつでもスライドを縦向きにするアドイン"があったら使うこともあるかも。と思ったので、ニーズがあるのかわかりませんが、アドインについても後日書こうと思います。

終わりです。ありがとうございました。

PowerPointマクロ上での長さ(pixel)とcmを換算する方法

今日はPowerPointマクロ上での長さについて書きます。

マクロ上でのShapeとかの長さはpixel単位になります。

でも、PowerPoint上でオートシェイプとかの長さを変更する際はcmで表記されます。

pixelをcmに変える計算は

(cmでの長さ) × 72 / 2.54

これでできます。

72 はPowerPointの解像度だと思います。72pixel / inch

2.54 はcmとinchの換算。1inch = 2.54cm

 

例のマクロはこんな感じ

Sub sample()

Dim w As Single

w = 15 * 72 / 2.54

With ActiveWindow.Selection.ShapeRange
  .Width = w
End With

End Sub

このマクロでは、選択しているShapeの幅を15cmに変更します。

長さを入れる変数はsingleかdoubleにして下さい。

そうしないと小数点以下も含めないと長さが微妙にずれます。

 

Shapeをたくさん出力する様なマクロでは最初に72/2.54を定数として宣言しておくと便利だと思います。

Private Const length As Single = 72 / 2.54

Sub sample()

Dim w As Single

w = 15 * length

With ActiveWindow.Selection.ShapeRange
  .Width = w
End With

End Sub

一番上に一行足しただけですが。。。

これで同じモジュール内ではlengthがcmへの換算に使えます。

Constは定数を宣言するときに使うやつです。dimの代わり(?)。

 

今回はこれで終わりです。短め?

ありがとうございました。

 

リボン上にストップウォッチ風のものを作る方法

今回はリボンのカスタマイズについて書きます。

どうしても時間を計測する機能が欲しかったので、ストップウォッチ風のリボンのボタンを作ったので、紹介します。

残念ながら時間を随時カウントアップはしません。でも、100分の1秒まで一応測れます。

参考にさせて頂いたサイトは次のサイトさんです。ありがとうございます。

 

見た目は下の感じ。

f:id:momen40:20161113032521j:plain

Startボタンを押すとボタンの表示がStopになります。

Stopボタンを押すと上の時間が更新されます。

リセットを押すと上の時間が0になります。

それでは早速コードを説明します。

(PowerPoint2010で動作確認しています)

 

ストップウォッチ風のリボンのcustom.xml

<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="onLoad">
  <ribbon startFromScratch="false">
    <tabs>
      <tab id="StopWatchTab" label="ストップウォッチ" >
        <group id="StopWatchGroup" label="ストップウォッチ">
         <labelControl id="Label1" getLabel="GetCounterLabel"></labelControl>
          <button id="StartStopButton" getLabel="ChangeName" supertip="スタート/ストップします" size="normal" onAction="Start_Stop" />
          <button id="ResetButton" label="    Reset    " supertip="リセットします"  getEnabled="ButtonEnabled" size="normal" onAction="Reset" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

 

onLoadで初期状態を決める関数を定義します。

Start/Stopボタンの表示はgetLabelで宣言した関数により動的に変更することができます。

Startを押した後、時間を測っている間はResetボタンが使用不可になります。ボンタの状態はgetEnabledで宣言した関数によります。

続いてVBAのコードになります。

 

 

ストップウォッチ風のリボンのVBA

Option Explicit

Private myRibbon As IRibbonUI ' リボン
Private Start As Single
Private ElapsedNum As Single '
Private ElapsedStr As String
Private Button As Boolean

Sub onLoad(ribbon As IRibbonUI) ' リボンの初期処理
Button = True
ElapsedStr = "0min00.00sec"
Set myRibbon = ribbon ' リボンの表示を更新できるようにするためにリボンをセットする
myRibbon.Invalidate ' リボンの表示を更新する
End Sub

Sub GetCounterLabel(control As IRibbonControl, ByRef returnedVal)
'経過時間の表示変更
returnedVal = ElapsedStr
End Sub

Sub Start_Stop(control As IRibbonControl) 'Start/Stopボタンの動作
If Button = True Then
  'ボタンがStartの場合
  Start = Timer
  If Not ElapsedNum = 0 Then ElapsedNum = (Timer - Start) + ElapsedNum
  Button = False  'ボタンの表示をStopに変更する
Else
  'ボタンがStopの場合
  ElapsedNum = (Timer - Start) + ElapsedNum
  ElapsedStr = ElapsedNum \ 60 & "min" & Format$(Round(ElapsedNum - (ElapsedNum \ 60) * 60, 2), "00.00") & "sec"
  Button = True 'ボタンの表示をStartに変更する
End If

myRibbon.Invalidate ' リボンの表示を更新する
End Sub

Sub ChangeName(control As IRibbonControl, ByRef label) 'Start/Stopの表示
If Button = True Then
  label = "    Start    "
Else
  label = "    Stop     "
End If
End Sub

Sub ButtonEnabled(control As IRibbonControl, ByRef enabled) 'ResetボタンのON/OFF
'Startボタンが押されるとResetボタンを使用不可にする
enabled = Button
End Sub

Sub Reset(control As IRibbonControl)
'時間の表記と経過時間をリセットする
ElapsedStr = "0min00.00sec"
ElapsedNum = 0
myRibbon.Invalidate
End Sub

 

見にくい。。。

でもコードをVBAに貼り付けてもらえれば、見やすくなると思います。

custom.xmlで宣言した関数名とVBAでの関数名を間違えないようにご注意ください。

ある程度コメントを入れましたが、わからない場合はコメント頂ければと思います。

 

こんなしっかりとしたコードをあげるのは初めてなのでちょっと緊張します。

ちょっとした時間を測る際に是非使ってみて下さい。

では、今回はこれで終わりです。ありがとうございました。