マクロ・VBAでリンク情報 Shape.LinkFormat.SourceFullName を現在位置に更新する
パワポのExcelリンクを現在の場所に自動更新したい
ペアで同じ位置にコピペしたのにリンク先がコピー前の位置なので自動変更したい
マクロ パワポのExcelリンクを現在の場所に更新したい ペアで同じ位置にコピペしたのにリンク先がコピー前の位置なので自動変更したい - YouTube
https://youtu.be/OBDI3ZnKZoE
目次
00:00 やりたいこと
02:07 1.手動更新
04:17 2.Excelマクロで自動更新してみる
12:56 3.終わりのあいさつ で ミスに気が付く
15:25 4.PowerPoint VBAでリンクのを更新するように変更する
21:22 Splitでパスを分解 配列最後をUBound
27:34 テストデータ 複数のExcel表をリンクする
31:11 Excel複数リンクの総合テスト
33:03 パワポマクロにコードを貼り付ける
38:32 簡単なコードの説明
#パワーポイント #エクセル #リンク更新 #自動更新
#マクロ #VBA #PowerPointVBA #ExcelVBA
#デバッグ #Debug
#LinkFormat #SourceFullName
0.やりたいこと
キッカケは知恵袋の質問
detail.chiebukuro.yahoo.co.jp
上記質問を勝手に妄想して、処理を勘違いで作ってしまった・・・
妄想した、テスト処理。
2022年
Excelのグラフを作り、パワポにリンク貼り付けしました。
ExcelDATA更新後、保存。パワポも更新。
2023年
上記ファイル2つを2023年のフォルダーにコピー・複製しました。
ExcelDATA更新後、保存。
パワポのグラフも更新するが、
グラフデータのリンクが2022のままで、更新されません。涙・・・
1.手動更新
グラフやリンクの数が少なければ、年一回の作業なら、
手動で更新するのもアリかなぁ。
ぉぃぉぃ、質問は自動なのに、手動から説明かよ・・・
1.1 ファイルへのリンク編集
ホームメニューの ファイル から
情報 を選択
右下に ファイルへのリンク編集 があるので、ここを選択
1.2 リンク元の編集
リンク元の編集で、ペアでコピーしたExcelファイルを選択します
↑だから、これが、複数あると手間だから、自動でやりたいんだってば
2.マクロで自動更新してみる
一回だけリンク更新でマクロを使用してみます。
2.1 ペアでファイルを開きます
2.2 Excelでマクロを一回実行させます
表示・マクロで何か名前を入れて、
下記のマクロコードをコピーします。Excelで実行します
'アクティブなパワポを捕まえて、 'そのスライド内のグラフリンクを 'このブックにする 'ここからExcelのマクロで1回実行する Dim ppApp As Object 'PowerPoint.Application On Error Resume Next '取得エラー時に次へ Set ppApp = GetObject(, "PowerPoint.Application") On Error GoTo 0 'エラーを元に戻す※これを忘れると、デバッグ時にハマるから注意 If ppApp Is Nothing Then '上↑で、パワポアプリを受け取れなかったら MsgBox "パワポを取得できません。プレゼンスライドを開いてから、再テストしてね" Exit Sub End If Dim objSLIDE As Object 'PowerPoint.Slide Dim objShape As Object 'PowerPoint.Shape 'パワポのシェイプ、テキスト、図形ほか Dim objCHART As Object 'PowerPoint Shape Chart ※グラフ For Each objSLIDE In ppApp.ActivePresentation.Slides 'スライドのループ For Each objShape In objSLIDE.Shapes '図形やテキスト、シェイプの中からグラフを探す '.HasChart で判断 If objShape.HasChart = msoTrue Then 'グラフなら Set objCHART = objShape.Chart 'チャートをセット '念のため、.IsLinked リンクか聞く If objCHART.ChartData.IsLinked = True Then 'ここで、リンクをセット ThisWorkbook.FullNameが自分自身のなまえだった・・ objShape.LinkFormat.SourceFullName = ThisWorkbook.FullName objShape.LinkFormat.Update '.LinkFormat.Updateも忘れないでね End If End If Next Next MsgBox "処理終了、パワポのスライドを確認してください" '↑ここまでをコピー
2.3 グラフの更新を確認します
パワポのグラフを確認します。
忘れないで、保存してね・・・
2.4 Excelを上書き保存します。
ここで、マクロが保存されないよ・・
と
Excelが親切に言ってくるけど、そのまま保存してください。
※今回使い捨てなので And データファイルをマクロ付きにすると、
他の人に渡すとき、いろいろとあるので、マクロ有効ブックにしない。
3.終わりのあいさつ
と、
こんな感じで、使い捨てマクロでリンクを更新してみました。
If objCHART.ChartData.IsLinked = True Then 'ここで、リンクをセット ThisWorkbook.FullNameが自分自身のなまえだった・・ objShape.LinkFormat.SourceFullName = ThisWorkbook.FullName
↑ ThisWorkbook.FullName ...
僕は、Excelとパワポがペアとは言ってないよ・・・
えっ、永遠のパートナーカップルじゃなくて、二股?しているの?
ふざけないでください、
各担当者にExcelでデータ作成依頼、
その提出されたExcelデータを会議資料としてなので、
横浜販売DATA.xlsx
名古屋販売DATA.xlsx
・
・
博多販売DATA.xlsx
から、グラフをコピーしてます
※各地区の出張先の飲み屋に恋人がいるので、、、
パワポ1 : Excel複数の時、そんなパターンもあるなぁ・・・と思いつつ、
逃げるように失礼します。
'ここで、リンクをセット ThisWorkbook.FullNameが自分自身のなまえだった・・ objShape.LinkFormat.SourceFullName = ThisWorkbook.FullName
↑を手抜きじゃなく、
.path を 旧パスに置き換えるように作らないとね。
アレンジして使ってみてください。
最後にとんでもないミスをやらかしたので
12:56 3.終わりのあいさつ で ミスに気が付く
↑ははは、仕様の勘違い・・これは、ダメだよね・・・
反省して、勢いで
最後まで作ってみた・・・解決のヒントとなれば幸いです・・・
4.リンクの表を更新するように変更する
15:25 4.PowerPoint VBAでリンクのを更新するように変更する
パワポとエクセルファイルをコピー後、
パワポファイルを開きます。
表示・マクロで何か名前を入れて、
下記のマクロコードをコピーします。実行します。
'ここからPointPointマクロに貼り1回実行する Dim objSLIDE As PowerPoint.Slide Dim objShape As PowerPoint.Shape 'パワポのシェイプ、テキスト、図形ほか Dim objCHART As PowerPoint.Chart Dim strLINK As String Dim strNEWNAME As String Dim strWORK As Variant Dim n As Long For Each objSLIDE In ActivePresentation.Slides 'スライドのループ For Each objShape In objSLIDE.Shapes '図形やテキスト、シェイプの中からグラフを探す 'LinkFormat.SourceFullName で判断 strLINK = "エラーです" On Error Resume Next '取得エラー時に次へ strLINK = objShape.LinkFormat.SourceFullName On Error GoTo 0 'エラーを元に戻す※これを忘れると、デバッグ時にハマるから注意 '↑のエラーを判断 If strLINK <> "エラーです" Then 'リンクアリのシェイプなら Debug.Print objShape.Name, objShape.LinkFormat.SourceFullName strWORK = Split(objShape.LinkFormat.SourceFullName, "\") '\で区切る n = UBound(strWORK) '配列の最後の値 strNEWNAME = ActivePresentation.Path & "\" & strWORK(n) 'Pathを更新する objShape.LinkFormat.SourceFullName = strNEWNAME objShape.LinkFormat.Update '.LinkFormat.Updateも忘れないでね End If Next Next MsgBox "処理終了、パワポのスライドを確認してください" '↑ここまでをコピー
youtu.be
https://youtu.be/OBDI3ZnKZoE
目次
00:00 やりたいこと
02:07 1.手動更新
04:17 2.Excelマクロで自動更新してみる
12:56 3.終わりのあいさつ で ミスに気が付く
15:25 4.PowerPoint VBAでリンクのを更新するように変更する
21:22 Splitでパスを分解 配列最後をUBound
27:34 テストデータ 複数のExcel表をリンクする
31:11 Excel複数リンクの総合テスト
33:03 パワポマクロにコードを貼り付ける
38:32 簡単なコードの説明
関連する過去記事:
ken3memo.hatenablog.com