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

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

ただいまの
回答率

90.86%

  • VBA

    1458questions

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

  • Excel

    1261questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

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

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,390

KN_

score 2

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プロパティを取得できません

該当のソースコード

Dim xlapp As Variant
Set xlapp = CreateObject("excel.application")
xlapp.Visible = False

'ファイルの存在チェック
If Dir(filepath) = "" Then
   GoTo Continue
End If

Set xlbooks = xlapp.Workbooks
’ここでエラーが発生
Set work_book = xlbooks.Open(filepath, ReadOnly:=True)

試したこと

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

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

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

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

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

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

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

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

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

補足情報

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+1

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/22 13:19

    勉強になります。

    キャンセル

  • 2017/12/22 15:30

    勉強になります。

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

    キャンセル

  • 2017/12/22 16:56

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

    キャンセル

0

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/21 10:26

    担当から連絡があり確認したところ
    Windows7 32Bitの環境との事でした
    Excelに関しては Excel2010 バージョン: 14.0.7015.1000(32ビット)との事で
    Office 2010 Service Pack 2をあてた直後のバージョンのようです

    新規でExcelのタスクを実行しているので開いているブックは無い状態です
    念のため、同じ名前のブックをチェックするコードも仕込んでみましたが効果なしでした

    アップデート関連に関してですが、特定PCは外部とのネットワークにはつながっていないらしく
    自動アップデートは動かないと連絡を受けています
    現在、手動でアップデートをかけたかを問い合わせ中です

    キャンセル

  • 2017/12/21 16:39

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

    キャンセル

  • 2017/12/22 09:28

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

    キャンセル

  • 2017/12/22 10:16

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

    キャンセル

  • 2017/12/22 10:25

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

    キャンセル

  • 2017/12/22 11:11

    申し訳ありません、記入漏れしていました
    Set xlbooks = xlapp.Workbooks
    としております

    対象のファイルも通常のエクセルのBookになっています(.xlsxです)
    シート数30弱、マクロ等は仕込まれていません

    キャンセル

  • 2017/12/22 13:24

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

    キャンセル

  • 2017/12/22 15:24

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

    キャンセル

  • 2017/12/22 15:36

    Set xxx = xlapp.Workbooks.Open(path)
    でも同エラーが出ますでしょうか?

    また、ExcelVBAで実行するのに、CreateObject("excel.application")で
    Excelを別途生成する理由はなんでしょうか?

    キャンセル

  • 2017/12/22 15:45

    もうしわけありません
    先ほど先方より連絡があり、現場から担当者が離れてしまったようですぐに変更したコードを試すことが難しくなってしまいました

    CreateObjectを使用した理由は別ブックOpen時のちらつき防止でした
    このコードを書いた当初はApplication.ScreenUpdatingの存在を知らずに
    やってしまった負の遺産です。。。

    念のため、CreateObjectを使用しないで
    Set work_book = Workbooks.Open(path)
    でも試してみましたが状況は変わらずでした

    キャンセル

  • 2017/12/22 16:01

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

    キャンセル

0

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

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

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

Option Explicit

Public Function test1(filepath As String) As Boolean
    Dim xlApplication As Object
    If Dir(filepath) = "" Then
        test1 = False
        Exit Function
    End If
    Set xlApplication = CreateObject("Excel.Application")
    xlApplication.Visible = True
    xlApplication.Workbooks.Open Filename:=filepath
    test1 = True
    Set xlApplication = Nothing
End Function

コード

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/21 11:01

    別途Excelプロセスを立ち上げていますが、Excel内のVBAで記述しております

    PCの付加状況に関して現在問合せ中です

    特定PCが手元になく好きにできるようなものではないのと
    再発を防ぐためにも原因を見つけておきたいので、再インストールはすぐには試せないですが
    最終的な手段として試してみようと思います

    キャンセル

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

  • ただいまの回答率 90.86%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • VBA

    1458questions

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

  • Excel

    1261questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。