
PowerPointのVBAについて質問です。
スライドショー実行中に、スライド内の図形をクリックすると、その図形の名前を取得する方法がわかりません。
今の状況ですが、
PowerPoint外部から図を20個ほど取得し、決まった名前を付け、定位置にランダムに配置することまでできました。
ここからが本題で、配置された図形をクリックしたときに、その図形の名前を取得したいのですが、どうすればいいのかわかりません。
今目指しているのは、
”もし、「あいう」という図形がクリックされたら、図形の名前を答える”というもので、
If ActivePresentation.Slides(2).Shapes(”あいう”).ActionSettings(ppMouseClick) = On Then
MsgBox ActivePresentation.Slides(2).Shapes(”あいう”).Name
みたいな文章にしたいと考えていますが、もちろんできませんでした。
補足ですが、
スライドショーをやめて、図形にマクロ登録をする方法は使用できません。
スライドショーの中で、外部フォルダから画像を取ってきて、名前を付け、並べ、その図形をクリックされたときにその図形の名前を答える…… これを一括で行いたいです。
No.5ベストアンサー
- 回答日時:
#4です。
読み返して、検証してみたら#4の回答はダメダメですね。すみません。
>その図形をクリックされたときにその図形の名前を答える
shp.ActionSettings(ppMouseClick).Run = #4のマクロ
のようにマクロを登録した場合、図形をクリックされたときに
クリックされた図形を特定するのが、PowerPointの場合、難しいようですね。・・・
乗りかかった船と言う事で、違う方法を考えました。
不確定要素あり有りなので、あくまで参考として検証及び不確定部分は調べてください。
処理の流れ
WindosAPIを使いクリック座標を取得してスライド(全画面)内の画像の座標をFor Each shp In sld.Shapesで一つずつ取得、クリック座標が画像座標内にある場合、そのShape名を表示します。危ういのは、座標取得、、、
大体の位置と言う事で、、、取敢えず
いずれも標準モジュールに
画像クリック時のアクションを設定(条件に合うすべてに)
Public Sub Sample()
Dim sld As Slide, shp As Shape
For Each sld In ActivePresentation.Slides
If sld.SlideIndex = 1 Then ’1ページ目のスライドのみ(変更してください
For Each shp In sld.Shapes
'If shp.Type = msoPicture Then 'Typeを限定した方が良いかも
shp.ActionSettings(ppMouseClick).Run = "Test_Sample"
'End If
Next shp
End If
Next sld
End Sub
"Test_Sample"は、モジュール名など適時追加変更してください。
Option Explicit
Type coordinate
x As Long
y As Long
End Type
Declare Function GetCursorPos Lib "User32" (lpPoint As coordinate) As Long
Sub Test_Sample()
Dim c As coordinate
GetCursorPos c
Dim sld As Slide, shp As Shape
For Each sld In ActivePresentation.Slides
If sld.SlideIndex = 1 Then
For Each shp In sld.Shapes
With shp
If c.y / 2 >= .Top And c.y / 2 <= .Top + .Height _
And c.x / 2 >= .Left And c.x / 2 <= .Left + .Width Then
MsgBox (.Name)
Exit Sub
End If
End With
Next
End If
Next
End Sub
おおよそ ポイント / 2? ちゃんと調べて回答した方が良いと思いますが
ごめんなさい。タイムアップと言う事で、、、
>shp.ActionSettings(ppMouseClick).Run = #4のマクロ
のようにマクロを登録した場合、図形をクリックされたときに
クリックされた図形を特定するのが、PowerPointの場合、難しいようですね。
やはりそうでしたか…
こちらもいろいろと試行錯誤してみましたが、For EachやWithを入れちゃうと動作が止まったり、値の受け渡しもできずでした。
いただいた文を基に、もう一度試行錯誤いたします。
お時間等お忙しい中、いろいろと考えてくださり、ありがとうございました。
No.4
- 回答日時:
こんにちは、横から失礼します。
>配置された図形をクリックしたとき
図形をクリックしたときマクロが実行されるように各画像の動作設定をします。
対象の画像を選択 >>挿入タグの動作をクリック >ダイアログのマクロを実行を選択し下記マクロを登録 (まとめて登録する事が出来ませんので1枚ずつ設定してください)
標準モジュールへ
Sub Shape_Name()
Dim sld As Slide, shp As Shape
Dim act As ActionSetting
For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
For Each act In shp.ActionSettings
If act.Action <> ppActionNone Then
MsgBox (shp.Name & " です")
End If
Next act
Next shp
Next sld
End Sub
どのスライドシェイプから実行してもクリックされたシェイプの名前がメッセージボックスに出力されます。
出力方法やクリック時の他のアクションを設定したい場合は工夫が必要かもです。
もし、マクロで画像に動作を設定するなら、すでに回答にあるように下記のようなマクロで設定できます。
例:
スライドインデックス1のすべての画像に対してアクションをマクロの実行に設定してよいなら
下記のマクロで設定できますが、、すべての画像です。
また、If sld.SlideIndex = 1 Thenの条件をなくせば、すべてのスライドとなります。
Public Sub Sample()
Dim sld As Slide, shp As Shape
For Each sld In ActivePresentation.Slides
If sld.SlideIndex = 1 Then
For Each shp In sld.Shapes
shp.ActionSettings(ppMouseClick).Run = "Shape_Name"
Next shp
End If
Next sld
End Sub
No.3
- 回答日時:
No2です。
>計20枚の図形が一つのスライドの中にあります。
図形にマクロを登録するだけのことなので、何枚あろうが関係ないと思いますけれど?
PPTのVBAは知らないので、よくわかりませんけれど・・・
No.2
- 回答日時:
こんばんは
PPTのVBAはほとんど知りませんが・・・
全体的になさりたいことはよくわかりませんが、ご質問の内容としては、スライドショー実行中のクリックアクションを設定したいという意味ですよね?
シェイプは「あいう」限定でよさそうなので・・・
ActivePresentation.Slides(2).Shapes(”あいう”).ActionSettings(ppMouseClick).Run = "hoge"
を実行しておくことで、クリック時にSub hoge()が実行されるようになります。
hoge内にメッセージを出すなどの処理を記述しておいてください。
※PPT2011(B 13426)にてテスト済。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/11 11:47
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/06/19 10:08
- その他(Microsoft Office) ワードのマクロについて教えてください。 1 2023/01/22 11:43
- Excel(エクセル) エクセルVBAで図形のテキストを取得してセルに入力 2 2022/10/05 23:09
- Excel(エクセル) Excelのvbaについて教えてください。 図形一つ一つに名前がついています。 指定した図形の名前を 2 2022/08/04 15:13
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Excel(エクセル) エクセルVBA マクロ処理中のポップアップメッセージについて 1 2023/08/04 21:34
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/03/01 15:44
- Excel(エクセル) ExcelのVBAコードについて教えてください。 1 2022/06/17 15:40
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
Excel_マクロ_現在開いているシ...
-
メッセージボックスのOKボタ...
-
特定のPCだけ動作しないVBAマク...
-
エクセルに張り付けた写真のフ...
-
Excel・Word リサーチ機能を無...
-
Excel マクロ VBA プロシー...
-
Excelのセル値に基づいて図形の...
-
マクロの連続印刷が突然不可能...
-
一つのTeratermのマクロで複数...
-
TERA TERMを隠す方法
-
Excel マクロでShearePoint先の...
-
エクセルVBAでNAVITIMEを使って...
-
ExcelVBAでPDFを閉じるソース
-
ExcelのVBA。public変数の値が...
-
VBAにて別ワークブック上の実行...
-
マクロ実行時、ユーザーフォー...
-
ExcelVBAの繰り返し処理でwebク...
-
IF関数を使ってマクロを実行さ...
-
MacのWordでショートカットの割...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel_マクロ_現在開いているシ...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
Excel マクロ VBA プロシー...
-
ExcelのVBA。public変数の値が...
-
エクセルで別のセルにあるふり...
-
エクセルに張り付けた写真のフ...
-
Excel マクロでShearePoint先の...
-
TERA TERMを隠す方法
-
Excelのセル値に基づいて図形の...
-
Excel VBAからAccessマクロを実...
-
ExcelVBAでPDFを閉じるソース
-
マクロ実行時、ユーザーフォー...
-
オートフィルターとExcelマクロ...
-
wordを起動した際に特定のペー...
-
特定文字のある行の前に空白行...
-
エクセルで縦に並んだデータを...
おすすめ情報
すみません、補足が足りませんでした。
PowerPoint外部から図を20個ほど取得し、決まった名前を付け、定位置にランダムに配置することまでしているため、スライドショー中には、”あいう”以外にも、”えおか”、”きくけ”、”こさち”……などなど、計20枚の図形が一つのスライドの中にあります。
なおかつ、その20枚のどれかをクリックしたとき、「私は”きくけ”だよ~」とか、「私は”あいう”だよ~」を表示したいのです。
よろしくお願いいたします。