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

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

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

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

Q&A

3回答

31445閲覧

WorkbooksクラスのOpenプロパティを取得できません

KN_

総合スコア6

VBA

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

0グッド

3クリップ

投稿2017/12/18 01:21

編集2017/12/22 06:36

###Excel2010のVBAにて別Bookを開きたい
Windows107(32bit)、Excel2010の環境にて
ExcelVBAにて別のBookを開く際にエラーが出て
Bookを開くことが出来ない

追記
Excel2010 Version14.0.7015.1000(32ビット)
開こうとしているBookに関して
・.xlsxファイル(このファイルを生成したExcelのVersionは不明)
・シート数30弱
・マクロ等はしこまれていない

###発生している問題・エラーメッセージ

特定のPCでのみで発生しており
他のPCではエラーは発生せずに正常稼動している

エラーの出ている特定のPCでも10月時点では動作を確認しており
11月中旬あたりで下記のエラーが出るようになった
エラーが発生している特定のPCが手元に無いため
10月~11月中旬ごろの間に、どのような変更があったかは不明

エラー番号:1004
エラー内容:WorkbooksクラスのOpenプロパティを取得できません

###該当のソースコード

VBA

1Dim xlapp As Variant 2Set xlapp = CreateObject("excel.application") 3xlapp.Visible = False 4 5'ファイルの存在チェック 6If Dir(filepath) = "" Then 7   GoTo Continue 8End If 9 10Set xlbooks = xlapp.Workbooks 11’ここでエラーが発生 12Set work_book = xlbooks.Open(filepath, ReadOnly:=True)

###試したこと
下記のことを試しても改善、及び現象の再現はしていない状況です

1.別Verのエクセルが導入された可能性を見越してExcelのVerをチェック

VBA

1If xlapp.Version <> 14# Then 2 Dim old_ver As Double 3 old_ver = xlapp.Version 4 xlapp.Quit 5 MsgBox "ExcelVer切り替え:" & old_ver 6 Set xlapp = CreateObject("excel.application.14") 7 Call m_output_log.output_log("ExcelVer切り替え:" & old_ver) 8End If

2.開こうとしているBookが他のアプリで使用されている可能性を見越してコピーをとり、コピーしたファイルを開く

3.開こうとしているBookのアクセス権限を変更する

4.負荷テストとしてExcelのプロセスを50個ほど立ち上げる

5.負荷テストとして、別アプリにて物理メモリを食いつぶしてみる

6.CreateObjectを使用せずに下記のコードでのOpen

VBA

1 Set work_book = Workbooks.Open(report_file, ReadOnly:=True)

###補足情報
特定のPCで使用しているファイルを別PCにコピーして実行してもエラーが出ない為
特定PCの環境依存の問題かと思われます

拙い文章かつ少ない情報ですが
お心当たりのある方、アドバイスをいただければ幸いです

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

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

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

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

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

guest

回答3

0

Excel VBAで「エラー 1004 WorkbooksオブジェクトのOpenメソッドに失敗しました」に関する原因の一例によると

開こうとしてるBookに制御できない警告が出て、開けない

が原因の可能性があるようです。
また、上記によると、この警告は手動でファイルを開いた場合は表示されない場合があるため気づきにくいとのことです。

この警告を解除するには
Word 文書または Excel ワークシートを開くとエラー メッセージ "ドキュメントを前回開いた時に重大なエラーが発生しました" が表示される
に記載されている手順([使用できないアイテム] から当該ファイルを除外する)で可能なようです。

これが原因かは特定できませんが、当該マシン上で確認してみる価値はあるかと思います。

投稿2017/12/22 02:46

can110

総合スコア38256

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

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

ExcelVBAer

2017/12/22 04:19

勉強になります。
KN_

2017/12/22 06:30

勉強になります。 [使用できないアイテム]には該当するファイルが表示されていませんでした 念のため、[使用できないアイテム]に表示されているものを全て除外(1件のみでしたが)状況は変わらずでした 原因は他にあるようです
can110

2017/12/22 07:56

コメントありがとうございます。 解消できなかったのは残念ですが、この可能性が潰せただけでもよかったかと思います。
guest

0

見た目で、Excelではなく、VBか他のOfficeのVBAで動いているのかな?と思います。(推測)
Excelであれば、単純に Workbooks.Open のメソッドで十分ですし。
更に、書き込んでいただいたソースコードも一部の為、なんとも言えないところがあります。
が、自分なりに解釈をすると下の様な感じです。

この手のVBAは、インターネットで検索すると、手軽にサンプルコードを手軽に入手できますが、CreateObjectの使いどころは、注意が必要です。Excelのアプリケーションが複数立ち上がってしまう為、パソコンに思わぬ負荷を与えてしまいます。

あと、他のパソコンでは動作すると書いてありました。
Officeを再インストールするとか試してはどうでしょうか?

VBA

1Option Explicit 2 3Public Function test1(filepath As String) As Boolean 4 Dim xlApplication As Object 5 If Dir(filepath) = "" Then 6 test1 = False 7 Exit Function 8 End If 9 Set xlApplication = CreateObject("Excel.Application") 10 xlApplication.Visible = True 11 xlApplication.Workbooks.Open Filename:=filepath 12 test1 = True 13 Set xlApplication = Nothing 14End Function 15 16コード

投稿2017/12/18 11:21

kai_keitai

総合スコア344

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

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

KN_

2017/12/21 02:01

別途Excelプロセスを立ち上げていますが、Excel内のVBAで記述しております PCの付加状況に関して現在問合せ中です 特定PCが手元になく好きにできるようなものではないのと 再発を防ぐためにも原因を見つけておきたいので、再インストールはすぐには試せないですが 最終的な手段として試してみようと思います
guest

0

まず、厳密には環境にbit数、特にOffice32bit/64bitも気になる点です。

さて、ご提示のエラーですが、
間違いなく環境依存の障害でしょう。

当たり前のコードが動かない場合、
OS、Officeに関するアップデートが原因である可能性があります。
※実際にOSのアップデートでOfficeが影響受けた事もあります。

また、ブックのオープンでは、
同じ名前のブックが開かれているとエラーになりますが、
そのチェックはされてますでしょうか?
(xlbooks.Open が何をしているか不明なので)
(捕捉ですが、xlbooks.Open にファイルの存在チェックを埋め込まないのでしょうか?)

投稿2017/12/18 04:26

ExcelVBAer

総合スコア1175

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

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

KN_

2017/12/21 01:26

担当から連絡があり確認したところ Windows7 32Bitの環境との事でした Excelに関しては Excel2010 バージョン: 14.0.7015.1000(32ビット)との事で Office 2010 Service Pack 2をあてた直後のバージョンのようです 新規でExcelのタスクを実行しているので開いているブックは無い状態です 念のため、同じ名前のブックをチェックするコードも仕込んでみましたが効果なしでした アップデート関連に関してですが、特定PCは外部とのネットワークにはつながっていないらしく 自動アップデートは動かないと連絡を受けています 現在、手動でアップデートをかけたかを問い合わせ中です
ExcelVBAer

2017/12/21 07:39

手動で該当ファイルを開くとどうなるのでしょうか? (VBAで開くときだけエラーになるのでしょうか?)
KN_

2017/12/22 00:28

手動で該当ファイルは通常通り開くことが可能です VBAでのみのエラーになります
ExcelVBAer

2017/12/22 01:16

xlbooks が明らかにされてませんが、 Set xlbooks = xlapp.WorkBooks と、 どこかでセットされているのでしょうか?
ExcelVBAer

2017/12/22 01:25

念の為ですが、開くファイルは、エクセルのBookでしょうか? (CSV等ではない?)
KN_

2017/12/22 02:11

申し訳ありません、記入漏れしていました Set xlbooks = xlapp.Workbooks としております 対象のファイルも通常のエクセルのBookになっています(.xlsxです) シート数30弱、マクロ等は仕込まれていません
ExcelVBAer

2017/12/22 04:24

他のBookに対してOpenしても同エラーが再現されるのでしょうか?
KN_

2017/12/22 06:24

他のBookに対しても同様のエラーが出ています
ExcelVBAer

2017/12/22 06:36

Set xxx = xlapp.Workbooks.Open(path) でも同エラーが出ますでしょうか? また、ExcelVBAで実行するのに、CreateObject("excel.application")で Excelを別途生成する理由はなんでしょうか?
KN_

2017/12/22 06:45

もうしわけありません 先ほど先方より連絡があり、現場から担当者が離れてしまったようですぐに変更したコードを試すことが難しくなってしまいました CreateObjectを使用した理由は別ブックOpen時のちらつき防止でした このコードを書いた当初はApplication.ScreenUpdatingの存在を知らずに やってしまった負の遺産です。。。 念のため、CreateObjectを使用しないで Set work_book = Workbooks.Open(path) でも試してみましたが状況は変わらずでした
ExcelVBAer

2017/12/22 07:01

そうですか。。。 環境バグは難しいですね(^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問