質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.06%

Powerpoint for MacのVBAマクロで、Excelの置換文字列対応表にしたがって、スライド内の文字列を一括検索・置換したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 654

hSpringsteen

score 7

前提・実現したいこと

Powerpoint for Macで、Excelに表組に書かれた置換文字列対応表にしたがって、スライド内の文字列を一括検索・置換したい。マクロで実現できればと思っている
近いイメージ:リンク内容

発生している問題・エラーメッセージ

Powerpoint for MacでVBAを組みました。
文字列をパワーポイント内で少数指定して、全文検索し置換する、までは組むことができました。
パワーポイントVBA内でうまくExcelの参照設定ができていないためか、外部リソースであるExcelと連携することがうまくいきません。デバッグで、そこでストップしてしまいます。

①番号リストコンパイルエラー「ユーザー定義型は定義されていません」
参照設定したのにもかかわらず、Dim XL As New Excel.Application に対し
②ActiveX コンポーネントはオブジェクトを作成できません。
429エラー

 Set XL = GetObject(, "Excel.Aplication")


③実行時エラー '424'オブジェクトが必要です
など

該当のソースコード

文字列置換の後半部分は省略し、エクセルを読み込む部分を主に以下転記しました。

Sub Replacement() 'エクセル 表を用いて文字列置換

 Dim befword As String '置換前の文字列
  Dim repword As String '置換後の文字列Dim XL, XLBK As Object 
 Set XL = GetObject(ThisWorkbook.Path & "/text置換.xlsx").Application  'PPTファイルと同一フォルダにあるエクセルファイルを読み込みたい
 XL.Visible = False  'いちいちエクセルファイルが表示されるのを防ぎたいが、表示されてしまう
 XL.ScreenUpdating = False

 befword = XLBK.Worksheets(1).Range("A1")  '検索ワード
 repword = XLBK.Worksheets(1).Range("B1")  '置換ワード

〜〜〜文字列置換部分のコード〜〜〜

XL.Application.Visible = True '開いたままのエクセルを表示させたい
Set XL = Nothing 'エクセルを最後に解放する
End Sub

試したこと

①参照設定のobject libraryの確認(そもそも参照されてない可能性)
「Microsoft Excel 14.0 Object library」(パワポフォルダに既存で入っている、tbl拡張子のファイル。エクセル 側も同様の14.0バージョン) を発見し、チェックしました。
しかし、チェック後も、いくら他の参照設定項目をOn/Offしても、コンパイルエラー「ユーザー定義型は定義されていません」でつまづいてしまいます。

②対応するアドインの検索(なし)

③参照設定がうまくいかない場合はオブジェクトからの直接読み込みができるとのことで、CreateObject、GetObject関数を使ってみた

Dim XL As Object
Set XL = CreateObject("Excel.Application")
Dim XLBK As Object
Set XLBK = CreateObject("Excel.Sheet")
 'あるいはCreateObject("Excel.Workbook")

Rf)リンク内容

③オブジェクト定義や構文を適宜変更してみた

■ 
Dim XL, XLBK As Object
→ Dim XL, XLBK
→Dim XL As Excel.Aplication
→Dim XL As Variant
→Dim XL As New Excel.Application
→Dim XL As Excel.Application、 Set XL As New Excel.Application

 


■Dim XLBK As Object
→ Dim XLBK As Excel.Workbook

■Set XL = GetObject(ThisWorkbook.Path & "/text置換.xlsx").Application 'Excelは起動した上で走らせている
→Set XL = CreationObject(ThisWorkbook.Path & "/text置換.xlsx").Application
→
Set XL = GetObject("/Applications/Microsoft Excel.app/Contents/SharedSupport/Type Libraries/Microsoft Excel.tlb") 'オブジェクトライブラリーを直接読み込もうとしている

■Set XL = GetObject(ThisWorkbook.Path & "/text置換.xlsx").Application
→Set XLBK = XL.Workbooks.Open(ThisWorkbook.Path & "/text置換.xlsx")

rf)リンク内容
リンク内容
リンク内容
リンク内容
リンク内容
リンク内容


 ⑤参照設定が不要の可能性があるとのことで、ExecuteExcel4Macroを使用してみるがうまく読み込まない
そもそも処理が遅いようなので期待できない

befword = ExecuteExcel4Macro("ThisWorkbook.Path & "/" & [text置換.xlsx]Sheet1'!R1C1")



 Rf)リンク内容

 
 ⑥エクセルを開くまで最も進行したのが、

Dim XL As Object
Set XL = CreateObject("Excel.Application")'⇦ここでエクセルを開くことはできる
 Dim XLBK As Object
Set XLBK = CreateObject("Excel.Sheet")'⇦ここでPowerpointもExcelもフリーズし強制終了してしまいますが、、
'エクセルの反応はするので、何らかのリンクはできているはずなのですが。。


 'エクセルを開いた上でSet XL = GetObject("Excel.Application")にするとすぐにフリーズします

補足情報(FW/ツールのバージョンなど)


 Macbook Air:Mac OS Mojave , 1.6GHz Intel Core i5, memory 16GB
Powerpoint for Mac(ver 15.33、office 365 サブスクリプション)
Excel for Mac(同上)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • meg_

    2019/12/19 23:24

    コードは「コードの挿入」で記入しましょう。また検証可能(実行可能)なコードを載せた方が回答がつきやすくなります。(検証不可なコードですと回答することが難しいです)

    キャンセル

  • hSpringsteen

    2019/12/19 23:50

    初質問で未熟な記載でした。修正いたしました。長文につき、途中で文章が途切れていた部分も補完いたしました。

    キャンセル

回答 1

checkベストアンサー

0

⑥で出来そうとのことなので、下記でブックを開けませんか?

Dim XL As Object
Set XL = CreateObject("Excel.Application")

XL.Visible=True
XL.Workbooks.Open "Excelブックのパス"

あとはExcel vbaの記述でOKかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/21 16:51

    下記2つの参照設定の状態で動作しました。
    ・Visual Basic For Applications
    ・Microsoft PowerPoint 15.0 Object Library

    キャンセル

  • 2019/12/21 17:06

    横から失礼しますが、Macのサンドボックスの影響は無いでしょうか?
    https://docs.microsoft.com/ja-jp/office/vba/api/overview/office-mac

    また、Addで新規ブックを作成できれば、ファイルアクセスに問題がありそう、と原因の切り分けもできそうです

    キャンセル

  • 2019/12/22 00:08

    みなさま、ありがとうございます。おそらくsandboxの問題でした。
    sandbox自体初めて知った概念で、調べました。当アプリケーションのある階層下のフォルダがアクセス許可されているようであり、
    Officeソフトに関しては/Users/●●/Library/Group Containers/UBF8T346G9.Office/User Content.localized/ 内にエクセルファイルを置いたことで、無事にプログラムが走りました!
    Macならではのセキュリティの問題だったのですね、、目から鱗でした。
    置換も無事にできそうであり、完成へ向け邁進いたします。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • VBAに関する質問
  • Powerpoint for MacのVBAマクロで、Excelの置換文字列対応表にしたがって、スライド内の文字列を一括検索・置換したい