• ベストアンサー

EXCEL/VBAで、自分のPCだけエラーが出ます

下記は、wordの「@一覧表」文字の部分をExcelで作成した表(B3:E9)に置き換えるマクロですが、自分のPCだけ「Executeメソッドは失敗しました:Findオブジェクト」のエラーが出ます。 何が原因なのでしょうか、対処方法を教えて下さい。 ちなみに自分のPCは、EXCEL2003です。他のPCのEXCEL2003や自宅のEXCEL2007ではエラーは出ません。 Dim wordApp As Word.Application Dim wordDoc As Word.Document Dim wordRange As Word.Range Set wordApp = New Word.Application Set wordDoc = wordApp.Documents.Open(ThisWorkbook.Path & "\ひな型用ドキュメント.doc") (途中略) Set wordRange = wordDoc.Content wordRange.Find.Execute "@一覧表", Forward:=True ←エラー Range("B3:E9").Copy wordRange.Paste

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

補足です。 #4のimogasiさんの分で起きたエラーですが、マクロの問題ではないようです。私は、下位バージョンに対する、参照ライブラリのエラーだと思いましたが、どうやら違っていました。一度、Office のメインテしたほうがよいのかもしれません。 http://support.microsoft.com/kb/292744/ja [BUG] Word のオートメーション クライアントで Find オブジェクトを呼び出す際にエラーが表示されるかクラッシュする # 非管理下のシステムでこのエラーの発生を防ぐには遅延バインディングが唯一の方法です。 と書かれています。これを読んで、遅延バインディングにしたわけではありませんが、結果的には良かったようです。

pegasusv
質問者

お礼

まさしくこの現象ですね。 フリーのEXCELアドインソフトを4~5種類ライブラリーに入れて、アドイン登録してから変なエラーメッセージが出始めました。 どのアドインソフトが影響しているか調べてみます。 色々と丁寧に回答して頂き、本当に有難うございました。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 >'Set wdDoc = wdApp.Documents.Open(ThisWorkbook.Path & "\ひな型用ドキュメント.doc") の先頭の「'」を削除すると正常に動作しました。 失礼しました。うっかり付けてしまいました。分かっていただいて何よりです。 それで、今回は、検索値の「@」というのが、問題だったようです。Find のオプションの Fuzzy や WildCard のTrue/False でエラーになるようです。 テキストもあまりありませんから、Webサイトしかありませんね。あったとしても、だいたい、元の仕入れ値段は二束三文なのに、どこかの人がプレミアを付けてしまい、とても購入する予算を超えてしまいます。 さて、Word VBA では、私は、以下のところを参照しています。 英語圏だけですが、 Word Tips Net http://word.tips.net/W006_Macros.html MVPはないようですが、私のお気に入りのひとつです。 The Word MVP Site http://word.mvps.org/FAQs/index.htm 背景が暗いのと文章が多すぎて、読みにくいです。 日本語でややこしいのは、2バイト文字の扱いです。それが、英語圏のサンプルにはまったくないので、しばらく試行錯誤します。早い話、Unicode というものは何か、ということです。 他に、リンク先を直接書けないのですが、Word VBA の本を探してみてください。その本のサンプルは、まだ生きています。 マイクロソフトのサポートのサンプル集です。 http://www.kayodeok.btinternet.co.uk/favorites/kbofficeword.htm#kbinfo ところで、どこかのフランス語のサイトで、Word のCommandListを一つずつフランス語に翻訳している人を見たけれども、日本ではないようです。私も途中までやったけれども、1000個以上あって、200個ぐらいでめげてしまいました。フランス語から英語なら、ある程度想像つくかもしれませんが、日本語はかけ離れているからです。

pegasusv
質問者

お礼

Word VBAのWeb紹介有難うございました。 英語はちょっと苦手ですが、色々とWebやWord VBA の本を探してみます。 マイクロソフトのサポートのサンプル集も活用させて頂きます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 >WORDの記録マクロをEXCEL VBAに展開するのですか? Wordで行う部分は、Wordの中で記録マクロを取って、それで、コードを取ります。 「EXCEL/VBAの講師がある文献」と書かれていますが、MS-WordはWord VBAという分野があります。たとえば、学校などで使うテキストのコードでも、実務上では使えないものも多くあります。 なぜエラーにムラが出るかというと、おそらく、検索オプションのワイルドカードを使う部分が、On になっているからだと思います。ClearFormatting をして、その後、主要なプロパティ設定を念を入れて設定してあげなくてはなりません。Find メソッドには、手動で使ったりした検索オプションが残っていることがあるのです。Word VBA のDefault は、必ずしも Default ではないということです。その点で、Excel VBAとは違うようです。 具体的というよりも、後から言われる前に、コード全部を出しておきます。これで、すべての環境で動くとは保障はしませんが……。 それと、「Libraryにアクセスできません」ということで、以下は、OLEオートメーションに切り替えました。 '------------------------------------------- Sub Copy_PasteTest1()   Dim wdApp As Object 'Word.Application   Dim wdDoc As Object 'Word.Document   Dim wdRange As Object 'Word.Range   Dim ret As Variant   Set wdApp = CreateObject("Word.Application") ' New Word.Application   wdApp.Visible = True 'Wordを見せる   On Error GoTo ErrorHandler   'Set wdDoc = wdApp.Documents.Open(ThisWorkbook.Path & "\ひな型用ドキュメント.doc")   Set wdRange = wdDoc.Content   With wdRange.Find     .ClearFormatting     .Text = "@一覧表"     .Forward = False     .Wrap = wdFindStop     .MatchByte = False     .MatchCase = False     .MatchWholeWord = True     .MatchSoundsLike = False     .MatchAllWordForms = False     .MatchWildcards = False     .MatchFuzzy = False 'ここはFalse にしないといけない     .Execute     If .Found Then       ActiveSheet.Range("B3:E9").Copy       wdRange.Paste       Application.CutCopyMode = False     Else       MsgBox "検索の単語は発見できませんでした。", vbInformation     End If   End With   If wdDoc.Saved = False Then     wdDoc.Save   End If ErrorHandler:   If Err.Number > 0 Then     MsgBox Err.Description   End If   wdApp.Quit   Set wdDoc = Nothing   Set wdApp = Nothing End Sub

pegasusv
質問者

お礼

コードを全部書きだしていただき、有難うございました。 'Set wdDoc = wdApp.Documents.Open(ThisWorkbook.Path & "\ひな型用ドキュメント.doc") の先頭の「'」を削除すると正常に動作しました。 Word VBAの正規の書き方にすれば正常に動作することは理解出来ましたが、コードの中身は理解できていないので、これから理解していきます。また、WORDの記録マクロを取ってみると確かに細かく記載されていました。 VBAは今年からやり出した初心者ですが、Word VBAを理解するのに良い方法があれば紹介お願いします。 ネットを検索すると色々ヒットしたので、取り敢えず色々リンク先をのぞいてみます。 丁寧にご回答頂き、有難うございました。 色々と勉強になりました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#2です、#2のお礼欄に関して。 私の書いた疑問(質問)点に、答えてくれていない(チェックしてくれてない)ようですが、私はデータの問題ではないかと思ったのですが。私は折角時間をかけて、動作確認をしたのですよ。チェックして置いてくださいね。 おかしい、おかしいというのは、結構、なーんだ、という原因の場合もありますよ。

pegasusv
質問者

お礼

失礼しました。TESTプロを試しなさいとは読み取れませんでした。 また、問題のPCは会社のPCにつき、会社しか試せませんが 本日10/30にTEST07をエクセルの標準モジュールに入れて実行しました。 (ワードの文書には、「限度」という語句を入れました。 VBEの画面でツールー参照設定でワードを参照設定しました。) 【結果】 1.メッセージボックス表示 2.WORDオープン 3.Find.Executeでエラーが発生しました。 「実行時エラー'430' クラスはオートメーションまたは予測したインターフェースをサポートしていません。」 のエラーメッセージが出ました。 なお、回答番号NO.5を試してみるとエラーメッセージが出ずにうまく動きました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 私は、Word VBAは守備範囲ですが、現行では、こちらには基本的に書いていません。ただ、ちょっとだけアドバアイスをさせていただきます。 >Set wordRange = wordDoc.Content >wordRange.Find.Execute "@一覧表", Forward:=True ←エラー >Range("B3:E9").Copy この三行が省略されていないとすれば、雑すぎて、まともに動くほうが驚きです。一体、どうして、このようなコードを思いついたのかなって思うぐらいです。Excel VBA中心の人には、多いようですね。 「EXCEL2007で動くマクロがEXCEL2000だとエラーが出ます。(qa4826906)」の質問と同質で、エラーが出るかでないかは結果論だとは思うのです。Find.Execute を省略しすぎて、VBAマクロとして成立していないように思うのです。少なくとも、私の知っているWord VBAの範疇のコードではありません。 面倒がらずに、正しく最初から、記録マクロでも取って、Find.Execute のコードを丸写しにして書いたらよいかと思います。一般的にバージョンに違いによる差よりも、正しく書かないコードが原因のことが多いです。

pegasusv
質問者

お礼

ご指摘の部分は、EXCEL/VBAの講師がある文献に記載されていたコードですので正しい書き方だと思っていたのですが、雑と言われるならどう書けば丁寧なのでしょうか。 EXCEL記録のマクロでは、WORDでの作業の記録は出来ないはずですが、上記の場合どのようにしたら記録マクロが取れるのでしょうか。 WORDの記録マクロをEXCEL VBAに展開するのですか? 具体的に教えて頂ければ、嬉しいのですが。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

#1です。 原因が良くわからないが Sub test07() 'wordのObjectLibraryに参照設定 Dim wordApp As Word.Application Dim wordDoc As Word.Document Dim wordRange As Word.Range Set wordApp = New Word.Application wordApp.Visible = True 'MsgBox ThisWorkbook.Path MsgBox CurDir Set wordDoc = wordApp.Documents.Open(CurDir & "\エクセルフィルタ説明.doc") Set wordRange = wordDoc.Content wordRange.Find.Execute "限度", Forward:=True Range("B3:E9").Copy wordRange.Paste wordDoc.Close Set wordApp = Nothing Set wordDoc = Nothing Set dRange = Nothing End Sub をエクセルの標準モジュールにおいて、参照設定し、実行すると 旨く行くようなんだが。 VBEの画面でツールー参照設定でワードを参照設定しているか。 開いているワードの文書には、私の場合の上記で言う「限度」という語句が、質問者の場合の、その文書内に存在するか。 ThisWorkbook.Path は、場合によっては(エクセルのブックを一旦名前をつけて保存して、その後開いた場合で無いような場合は)エラーになる。 など思ったが。

pegasusv
質問者

お礼

回答有難うございました。 コードは間違っていないと思います。 (EXCEL2000/2007及び他のPCのEXCEL2003で動作しています。) EXCEL起動時に、(1)「Libraryにアクセスできません。読み取り専用または暗号化されています」 (2)「Libraryにアクセスできません。」などのメッセージが毎回出て、 自分のPCのEXCEL自体に問題があるのではと思っています。 一度、EXCELをアンインスツールして、再度インストールしてみます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

http://questionbox.jp.msn.com/qa4826906.html の質問とそっくりだが、解決済みではないのですか。随分日日がたってますが、両質問はどういう関係になるのですか。 今回の質問は、エクセルの標準モジュールに入れて実行しているのですね。

pegasusv
質問者

お礼

質問の内容を良く見てもらえれば分かりますが、同一マクロの質問ですが内容が全然違います。 前の質問で問題が解決してexcel2000で使用していましたが、自分のPCがexcel2003になって実行してみると違う個所でエラーが出たので再度質問しました。 構文は前の文書を使用していますが、内容は全然違う内容です。 これが経緯ですが、問題の質問の回答を宜しくお願いします。 今回の質問は、エクセルの標準モジュールに入れて実行しています。

関連するQ&A

専門家に質問してみよう