teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コードは<Code>で表記、リンクもオブジェクトを使ってみやすく工夫した

2019/12/19 14:49

投稿

hSpringsteen
hSpringsteen

スコア7

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
  Powerpoint for Macで、Excelに表組に書かれた置換文字列対応表にしたがって、スライド内の文字列を一括検索・置換したい。マクロで実現できればと思っている
3
- 近いイメージ:rf)https://ppdtp.com/powerpoint/vba-bulk-find-replace-text/
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.Work")
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
-  Dim XL, XLBK As Object
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
- Set XLBK = XL.Workbooks.Open(ThisWorkbook.Path & "/text置換.xlsx")
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
- rf)http://vba.best-answer.info/excel/014.html
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
- https://www.vba-ie.net/function/getobject.php
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(同上)