🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

Q&A

解決済

1回答

1592閲覧

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

hSpringsteen

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

0グッド

0クリップ

投稿2019/12/19 14:12

編集2019/12/19 14:49

前提・実現したいこと

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'エクセルの反応はするので、何らかのリンクはできているはずなのですが。。 67 'エクセルを開いた上で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(同上)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2019/12/19 14:24

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

2019/12/19 14:50

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

回答1

0

ベストアンサー

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

vba

1Dim XL As Object 2Set XL = CreateObject("Excel.Application") 3 4XL.Visible=True 5XL.Workbooks.Open "Excelブックのパス"

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

投稿2019/12/19 21:49

meg_

総合スコア10742

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hSpringsteen

2019/12/20 08:21

ご検討・ご回答ありがとうございます。 助言の通り、パス名を具体的に入れた上で(フルパスも試す)、コードを走らせてみましたが、 確かに2-3行目でエクセルのメニュー画面までは問題なく立ち上がります。 ところが4行目の部分でエラー、フリーズが起こります 「問題が発生したためExcelを終了しました」→強制終了 「この文書のリンクされたオブジェクトまたは埋め込みオブジェクトはまだ更新中です。続行しますか?」→Powerpointも強制終了 構文エラーというわけでもなさそうですし、試行錯誤した上で、解決策がわかりません。
meg_

2019/12/20 08:58

普通にそのエクセルファイルを開くことは出来ますよね?(エクセルファイルに問題がないことの確認です)
hSpringsteen

2019/12/21 00:34 編集

そうですね。そのxlsxファイルは単体で綺麗に開くことができます。 もう少し進めて検証しました。 他の重いプログラム動作後は、マクロすら立ち上がらないことがあるため、 Macを一旦再起動した状況で(メモリを解放したつもり)、 以下を走らせました。 Dim XL As Object Dim XLBK As Object Set XL = CreateObject("Excel.Application") XL.Visible = True Set XLBK = XL.Application.Workbooks.Open ("●●") ●はパス名 すると、エクセル立ち上げまでは問題なく、 一瞬だけ目的のエクセルファイルも立ち上がった後、前述の「問題が発生した」強制終了に至ります。 ファイルへのアクセスが、梨の礫、というわけではなさそうです。 アクティビティモニタを観察してますが、特にメモリを食ってフリーズ、というわけではなさそうです。
meg_

2019/12/21 03:03

XL.Application.Workbooks.Openではなく、XL.Workbooks.Openで動作しませんか?(XLがアプリケーションオブジェクトそのものかと)
hSpringsteen

2019/12/21 03:41

結論は同じく、強制終了でした。 XL.Application.Workbooks.Openの場合一瞬開きましたが、XL.Workbooks.Openでは開いていないように見えました (ファイルが一瞬開くかどうかは、メモリを食ってきているのも一因かもしれませんが・・)
meg_

2019/12/21 06:37

そうですか。当方、環境がWindowsのため私のコードでパワポマクロからエクセルブックを開くことが出来るのですが、Macでは違うのかもしれませんね。
hSpringsteen

2019/12/21 06:54

なるほど、ありがとうございます。 一瞬はファイルを開くことができたのを光明に、何らかの解決手段はあると考え、粘ってみたいと思います。 ちなみに、今回のプログラムは「エクセルの参照設定」をしなくてもオブジェクトとして開くことのできるものだと思っていますが、Windowsでも参照設定を切ってファイルを開くことは可能なのでしょうか? もし参照設定が必要ということであれば、Macの場合はそこがネックなのかもしれません。。 *Powerpoint Macroではマクロや参照設定をいちいち保存できない環境なので、やや面倒です
meg_

2019/12/21 07:51

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

2019/12/21 15:08

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問