質問編集履歴
1
コードは<Code>で表記、リンクもオブジェクトを使ってみやすく工夫した
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
Powerpoint for Macで、Excelに表組に書かれた置換文字列対応表にしたがって、スライド内の文字列を一括検索・置換したい。マクロで実現できればと思っている
|
3
|
-
近いイメージ:
|
3
|
+
近いイメージ:[リンク内容](https://ppdtp.com/powerpoint/vba-bulk-find-replace-text/)
|
4
4
|
|
5
5
|
### 発生している問題・エラーメッセージ
|
6
6
|
|
@@ -8,14 +8,20 @@
|
|
8
8
|
文字列をパワーポイント内で少数指定して、全文検索し置換する、までは組むことができました。
|
9
9
|
パワーポイントVBA内でうまくExcelの参照設定ができていないためか、外部リソースであるExcelと連携することがうまくいきません。デバッグで、そこでストップしてしまいます。
|
10
10
|
|
11
|
-
コンパイルエラー「ユーザー定義型は定義されていません」
|
11
|
+
①番号リストコンパイルエラー「ユーザー定義型は定義されていません」
|
12
|
+
参照設定したのにもかかわらず、Dim XL As New Excel.Application に対し
|
12
|
-
ActiveX コンポーネントはオブジェクトを作成できません。
429エラー
|
13
|
+
②ActiveX コンポーネントはオブジェクトを作成できません。
429エラー
|
14
|
+
```VBA
|
15
|
+
Set XL = GetObject(, "Excel.Aplication")
|
16
|
+
```
|
17
|
+
③実行時エラー '424'オブジェクトが必要です
|
13
|
-
など
|
18
|
+
など
|
14
19
|
|
15
20
|
### 該当のソースコード
|
16
21
|
|
17
|
-
言語:VBA
|
18
22
|
文字列置換の後半部分は省略し、エクセルを読み込む部分を主に以下転記しました。
|
23
|
+
|
24
|
+
```VBA
|
19
25
|
Sub Replacement() 'エクセル 表を用いて文字列置換
|
20
26
|
Dim befword As String '置換前の文字列
|
21
27
|
Dim repword As String '置換後の文字列
|
@@ -31,7 +37,7 @@
|
|
31
37
|
XL.Application.Visible = True '開いたままのエクセルを表示させたい
|
32
38
|
Set XL = Nothing 'エクセルを最後に解放する
|
33
39
|
End Sub
|
34
|
-
|
40
|
+
```
|
35
41
|
### 試したこと
|
36
42
|
|
37
43
|
①参照設定のobject libraryの確認(そもそも参照されてない可能性)
|
@@ -42,43 +48,75 @@
|
|
42
48
|
|
43
49
|
③参照設定がうまくいかない場合はオブジェクトからの直接読み込みができるとのことで、CreateObject、GetObject関数を使ってみた
|
44
50
|
|
51
|
+
```VBA
|
45
52
|
Dim XL As Object
|
46
53
|
Set XL = CreateObject("Excel.Application")
|
47
54
|
Dim XLBK As Object
|
48
55
|
Set XLBK = CreateObject("Excel.Sheet")
|
49
|
-
あるいはCreateObject("Excel.
|
56
|
+
'あるいはCreateObject("Excel.Workbook")
|
57
|
+
```
|
50
58
|
|
59
|
+
Rf)[リンク内容](https://www.relief.jp/docs/excel-vba-using-word-const.html)
|
51
60
|
|
61
|
+
|
52
62
|
③オブジェクト定義や構文を適宜変更してみた
|
53
63
|
|
64
|
+
■
|
54
|
-
|
65
|
+
Dim XL, XLBK As Object
|
55
66
|
→ Dim XL, XLBK
|
56
|
-
→Dim XL As Excel.Aplication
|
67
|
+
→Dim XL As Excel.Aplication
|
57
68
|
→Dim XL As Variant
|
69
|
+
→Dim XL As New Excel.Application
|
70
|
+
→Dim XL As Excel.Application、 Set XL As New Excel.Application
|
71
|
+
|
72
|
+
|
58
73
|
|
74
|
+
■Dim XLBK As Object
|
75
|
+
→ Dim XLBK As Excel.Workbook
|
76
|
+
|
77
|
+
|
59
|
-
Set XL = GetObject(ThisWorkbook.Path & "/text置換.xlsx").Application 'Excelは起動した上で走らせている
|
78
|
+
■Set XL = GetObject(ThisWorkbook.Path & "/text置換.xlsx").Application 'Excelは起動した上で走らせている
|
60
79
|
→Set XL = CreationObject(ThisWorkbook.Path & "/text置換.xlsx").Application
|
61
|
-
→
Set XL = GetObject(/Applications/Microsoft Excel.app/Contents/SharedSupport/Type Libraries/Microsoft Excel.tlb)
|
80
|
+
→
Set XL = GetObject("/Applications/Microsoft Excel.app/Contents/SharedSupport/Type Libraries/Microsoft Excel.tlb") 'オブジェクトライブラリーを直接読み込もうとしている
|
81
|
+
|
62
82
|
|
83
|
+
■Set XL = GetObject(ThisWorkbook.Path & "/text置換.xlsx").Application
|
84
|
+
→Set XLBK = XL.Workbooks.Open(ThisWorkbook.Path & "/text置換.xlsx")
|
85
|
+
|
63
86
|
|
87
|
+
rf)[リンク内容](http://vba.best-answer.info/excel/014.html)
|
88
|
+
[リンク内容](https://www.relief.jp/docs/vba-createobject-excel-sheet-returns-workbook.html)
|
64
|
-
|
89
|
+
[リンク内容](https://garafu.blogspot.com/2018/09/vbscript-excel.html)
|
90
|
+
[リンク内容](https://docs.microsoft.com/ja-jp/office/troubleshoot/office/getobject-createobject-behavior)
|
91
|
+
[リンク内容](https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet)
|
92
|
+
[リンク内容](https://www.vba-ie.net/function/getobject.php)
|
93
|
+
|
65
94
|
|
66
|
-
|
95
|
+
|
67
|
-
https://www.relief.jp/docs/vba-createobject-excel-sheet-returns-workbook.html
|
68
|
-
https://garafu.blogspot.com/2018/09/vbscript-excel.html
|
69
|
-
https://docs.microsoft.com/ja-jp/office/troubleshoot/office/getobject-createobject-behavior
|
70
|
-
https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet
|
71
|
-
|
96
|
+
⑤参照設定が不要の可能性があるとのことで、ExecuteExcel4Macroを使用してみるがうまく読み込まない
|
97
|
+
そもそも処理が遅いようなので期待できない
|
72
98
|
|
73
|
-
|
99
|
+
```VBA
|
100
|
+
befword = ExecuteExcel4Macro("ThisWorkbook.Path & "/" & [text置換.xlsx]Sheet1'!R1C1")
|
101
|
+
```
|
102
|
+
|
103
|
+
Rf)[リンク内容](http://officetanaka.net/excel/vba/tips/tips28.htm)
|
104
|
+
|
105
|
+
|
74
|
-
|
106
|
+
⑥エクセルを開くまで最も進行したのが、
|
107
|
+
|
75
|
-
|
108
|
+
```VBA
|
76
|
-
|
109
|
+
Dim XL As Object
|
77
|
-
|
110
|
+
Set XL = CreateObject("Excel.Application")'⇦ここでエクセルを開くことはできる
|
78
|
-
|
111
|
+
Dim XLBK As Object
|
79
|
-
|
112
|
+
Set XLBK = CreateObject("Excel.Sheet")'⇦ここでPowerpointもExcelもフリーズし強制終了してしまいますが、、
|
113
|
+
'エクセルの反応はするので、何らかのリンクはできているはずなのですが。。
|
114
|
+
|
115
|
+
'エクセルを開いた上でSet XL = GetObject("Excel.Application")にするとすぐにフリーズします
|
116
|
+
```
|
117
|
+
|
80
118
|
### 補足情報(FW/ツールのバージョンなど)
|
81
|
-
|
119
|
+
|
82
120
|
Macbook Air:Mac OS Mojave , 1.6GHz Intel Core i5, memory 16GB
|
83
121
|
Powerpoint for Mac(ver 15.33、office 365 サブスクリプション)
|
84
122
|
Excel for Mac(同上)
|