前提・実現したいこと
Powerpoint for Macで、Excelに表組に書かれた置換文字列対応表にしたがって、スライド内の文字列を一括検索・置換したい。マクロで実現できればと思っている
近いイメージ:リンク内容
発生している問題・エラーメッセージ
Powerpoint for MacでVBAを組みました。
文字列をパワーポイント内で少数指定して、全文検索し置換する、までは組むことができました。
パワーポイントVBA内でうまくExcelの参照設定ができていないためか、外部リソースであるExcelと連携することがうまくいきません。デバッグで、そこでストップしてしまいます。
①番号リストコンパイルエラー「ユーザー定義型は定義されていません」
参照設定したのにもかかわらず、Dim XL As New Excel.Application に対し
②ActiveX コンポーネントはオブジェクトを作成できません。
429エラー
VBA
1 Set XL = GetObject(, "Excel.Aplication")
③実行時エラー '424'オブジェクトが必要です
など
該当のソースコード
文字列置換の後半部分は省略し、エクセルを読み込む部分を主に以下転記しました。
VBA
1Sub Replacement() 'エクセル 表を用いて文字列置換 2 Dim befword As String '置換前の文字列 3 Dim repword As String '置換後の文字列 4 Dim XL, XLBK As Object 5 Set XL = GetObject(ThisWorkbook.Path & "/text置換.xlsx").Application 'PPTファイルと同一フォルダにあるエクセルファイルを読み込みたい 6 XL.Visible = False 'いちいちエクセルファイルが表示されるのを防ぎたいが、表示されてしまう 7 XL.ScreenUpdating = False 8 befword = XLBK.Worksheets(1).Range("A1") '検索ワード 9 repword = XLBK.Worksheets(1).Range("B1") '置換ワード 10 11〜〜〜文字列置換部分のコード〜〜〜 12 13XL.Application.Visible = True '開いたままのエクセルを表示させたい 14Set XL = Nothing 'エクセルを最後に解放する 15End Sub
試したこと
①参照設定のobject libraryの確認(そもそも参照されてない可能性)
「Microsoft Excel 14.0 Object library」(パワポフォルダに既存で入っている、tbl拡張子のファイル。エクセル 側も同様の14.0バージョン) を発見し、チェックしました。
しかし、チェック後も、いくら他の参照設定項目をOn/Offしても、コンパイルエラー「ユーザー定義型は定義されていません」でつまづいてしまいます。
②対応するアドインの検索(なし)
③参照設定がうまくいかない場合はオブジェクトからの直接読み込みができるとのことで、CreateObject、GetObject関数を使ってみた
VBA
1Dim XL As Object 2Set XL = CreateObject("Excel.Application") 3Dim XLBK As Object 4Set XLBK = CreateObject("Excel.Sheet") 5 'あるいは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を使用してみるがうまく読み込まない
そもそも処理が遅いようなので期待できない
VBA
1befword = ExecuteExcel4Macro("ThisWorkbook.Path & "/" & [text置換.xlsx]Sheet1'!R1C1")
Rf)リンク内容
⑥エクセルを開くまで最も進行したのが、
VBA
1Dim XL As Object 2Set XL = CreateObject("Excel.Application")'⇦ここでエクセルを開くことはできる 3 Dim XLBK As Object 4Set XLBK = CreateObject("Excel.Sheet")'⇦ここでPowerpointもExcelもフリーズし強制終了してしまいますが、、 5'エクセルの反応はするので、何らかのリンクはできているはずなのですが。。 6 7 'エクセルを開いた上で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(同上)
回答1件
あなたの回答
tips
プレビュー