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

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

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

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

マクロ

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

Q&A

解決済

1回答

6032閲覧

マクロでブックからブックに転記をしたいが、エラーメッセージ「クラスはオートメーションをサポートしていないか、または必要なインターフェースをサポートしていません」が出てきてしまいます。

icecleam

総合スコア46

VBA

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

マクロ

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

0グッド

0クリップ

投稿2020/09/17 11:10

編集2020/09/17 13:07

次のマクロをExcel for Macで実行しようとすると以下のエラーが出てしまいます。

エラーメッセージ

「クラスはオートメーションをサポートしていないか、または必要なインターフェースをサポートしていません」


インターネットでも色々調べたのですが分かりませんでした。

デバッグをすると
Set wbAcq = xlsAcq.Workbooks.Open(strPath & strFile)
の行で止まってしまいます。

書き方を変えればうまく動く等などございましたら、申し訳ありませんが教えていただきたいです。
よろしくお願いします。

Macro

1Sub sample1() 2 3 Dim lngRowsNo As Long ' 書きこむ位置 4 Dim lngSheetIndex As Long ' シートの番号 5 Dim strFile As String ' Excelファイルの場所 6 Dim xlsAcq As New Excel.Application ' 取得側Excel 7 Dim wbAcq As Workbook ' 取得側Excelブック 8 Dim wsAcq As Worksheet ' 取得側Excelシート 9 Dim wsSet As Worksheet ' 設定側Excelシート 10 Const strPath As String = "パスの指定" 11 Set wsSet = ActiveSheet 12 13 strFile = Dir(strPath & "*.xls") 14 lngRowsNo = 1 15 Do Until strFile = "" 16 '----- Excelブックを開く 17 Set wbAcq = xlsAcq.Workbooks.Open(strPath & strFile) 18 19 '----- シートを検索 20 For lngSheetIndex = 1 To wbAcq.Worksheets.Count 21 '----- 「更新」シートを検索 22 If wbAcq.Worksheets(lngSheetIndex).Name = "更新" Then 23 '----- 「更新」シートを変数へ登録 24 Set wsAcq = xlsAcq.Worksheets(lngSheetIndex) 25 '----- 「更新」シートの内容を現在のシートにコピー(自由に変更して下さい) 26 wsSet.Cells(lngRowsNo, 1) = wsAcq.Cells(1, 1) 27 '----- 書きこむ位置移動 28 lngRowsNo = lngRowsNo + 1 29 '----- 検索の終了 30 Exit For 31 End If 32 Next lngSheetIndex 33 34 '----- シート参照の解放 35 Set wsAcq = Nothing 36 '----- ブックを閉じる 37 wbAcq.Close Savechanges:=False 38 '----- 次のファイルへ 39 strFile = Dir() 40 Loop 41 42 '----- Excelへの参照の解放 43 Set xlsAcq = Nothing 44 45End Sub

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

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

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

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

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

meg_

2020/09/17 11:21

Excelのバージョンは何ですか?
icecleam

2020/09/17 11:22

バージョンは バージョン 16.40(20081000) と記載されています
meg_

2020/09/17 11:30

> バージョン 16.40(20081000) 「Microsoft 365 サブスクリプション」ですね。
icecleam

2020/09/17 11:31

ですね ライセンスのところに「Microsoft 365 サブスクリプション」の記載がありました!
guest

回答1

0

ベストアンサー

以前のExcel for Macでは下記問題点があったようです。
※当方Macは持っていないため動作確認はしていません。Microsoft 365にて改善されている可能性もあります。

Excel for Mac 2016 (v15.41) 時点

Dir() 関数でファイル一覧をサクッと取得できない

Dir("/path/to/directory", MacID("XLSX")) とか Dir("/path/to/directory", vbDirectory) みたいにしないと何も返ってこない。また、Dir() を複数回呼んでのループ (同ディレクトリの複数ファイル取得) もできない

Mac の Excel VBA は色々と挙動が違うので、VBA で OS 判別する
MacOS 版 Excel VBA で Dir() 関数の代わり・ファイル一覧を取得する

Microsoft Dir 関数

投稿2020/09/17 11:38

meg_

総合スコア10760

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

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

icecleam

2020/09/17 11:57

以下のマクロで、一応ファイル名を正常に取れてこれたので、Dir()関数が原因ではないかもしれないです。。 --- Sub Macro() Dim buf As String, cnt As Long Const Path As String = "ここでフォルダのパスを指定" buf = Dir(Path & "*.xls") Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Loop End Sub ----
meg_

2020/09/17 12:01

2回目以降も取れてますか?
icecleam

2020/09/17 12:03

はい、一応3ファイルで試しましたが、それで取れていました
meg_

2020/09/17 12:11

そうですか。では、「Set wbAcq = xlsAcq.Workbooks.Open(strPath & strFile)」の中で「strPath & strFile」の部分は問題ないということですね。 あとは「xlsAcq」にオブジェクトがセットされているか?でしょうか。(Windowsで書く時は Workbooks.Openと書きますが、Macではオブジェクトが必要なのでしょうか?)
icecleam

2020/09/17 12:37 編集

xlsAcqの部分を削除したら、エラーな消え ファイル名の転記はできませんがフォルダ内のxlsファイルを連続で開閉する挙動を確認できました。 やっぱりxlsAcqの部分が何かおかしいのでしょうか。。 Set wbAcq = Workbooks.Open(strPath & strFile) こんな感じですね
icecleam

2020/09/17 13:00

ひとまずエラーは無くなりましたので、また別途で質問をさせていただきますね 長時間お付き合いいただき、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問