[[20150519171518]] 『ブック間のコピペマクロのエラー原因について』(ぺもと) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ブック間のコピペマクロのエラー原因について』(ぺもと)

いつもお世話になります。

「渉外担当者実績表(実績・行動検討資料)」というブックの「見出し(簡易表)」というシートのL7:L43の値を、
別のブック(貼り付けたいブック)の「年月順位」というシートのO5:O41に貼り付けるためのマクロを作っています。
(これが成功したら、他の行列も貼り付けていきますが)

Sub Macro1()
  ⇒With Windows("渉外担当者実績表(実績・行動検討資料).xls").Sheets("見出し(簡易表)")

      Sheets("年月順位 ").Range("O5:O41").Value = .Range("L7:L43").Value
    End With
End Sub

このマクロだと実行時エラー438が出て、「⇒」の行が黄色くなります。
同じブックのシート間のコピペのマクロは以前教えていただいてできるようになったのですが、
そのマクロを応用してブック間のコピペをしようとしたらこうなりました。
どこが間違っているか分かりませんでした。
お時間があればご教授お願いいたします。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


そこが解決しても、次の「Sheets("年月順位 ")」のところでエラーになりそう。(シート名末尾は本当に空白付き?)

とりあえず、With Windows("渉外担当者実績表(実績・行動検討資料).xls") だけでステップ実行し、この行がエラーになるか確かめてください。
エラーになるようなら、ファイル名を一字一句間違いがないか確認。特に全角半角や、スペース文字ですね。

エラーにならないなら、"見出し(簡易表)" というシート名を確認してみてください。
(???) 2015/05/19(火) 17:43


おはようございます。
???さん、コメントありがとうございます。

「Sheets("年月順位 ")」は、末尾に半角スペースが入ってるので間違いないです。
With Windows("渉外担当者実績表(実績・行動検討資料).xls") でステップ実行したらエラーでした。
一字一句、カッコの全角も確認しましたが間違っていません。スペースなども問題ありません。

(追記)
ちなみに、参考にした、シート間コピペのマクロは以下です。

With Sheets("目標")

     Sheets("住宅資金").Range("C5:C23").Value = .Range("B4:B22").Value
     Sheets("住宅資金").Range("I5:I23").Value = .Range("B27:B45").Value
End With

マクロの記録でやっていけばいい話なのですが、
せっかく以前教えていただいたマクロを活用したいと思っています。
(ぺもと) 2015/05/20(水) 09:06


With Windowsを、With Workbooks に変えるとどうなりますか?
また、渉外担当者実績表(実績・行動検討資料).xlsのブックは、同じExcelで開いてありますか?
(???) 2015/05/20(水) 10:57

???さん
With Workbooksにしたらできました!
ありがとうございます。
(ぺもと) 2015/05/20(水) 11:08

おはようございます。

上記の件では大変お世話になりました。
渉外担当者実績表(実績・行動検討資料).xlsを開いていないと実行できないということだったので
ファイルを閉じたまま参照させる方法がないか調べてみたところ、Excel 4.0というものがあると知りました。
ぜんぜん分からないながらにマクロを組んでみたものの、やはり上手くいきません…

→Sub Macro1()

  ⇒With MsgBox ExecuteExcel4Macro("'C:\[渉外担当者実績表(実績・行動検討資料).xls]Sheets("見出し(簡易表)")'")

         Sheets("年月順位 ").Range("O5:O41").Value = .Range("!R12C7:!R12C43").Value
         Sheets("年月順位 ").Range("P5:P41").Value = .Range("!R14C7:!R14C43").Value
                               ・
                               ・
                               ・
    End With
End Sub

構文エラーが出ます。
「→」ここで黄色くなり、「⇒」ここで赤文字になります。

そもそもMsgBox ExecuteExcel4Macroの使い方が間違っているんだと思いますが、何かヒントをいただければと思います。
よろしくお願いいたします。
(ぺもと) 2015/05/21(木) 11:06


こんにちは

With MsgBox 時点でおかしいですよね。

それは別として、ExecuteExcel4Macroではセル一つずつしか値を取得出来ないので
今回の処理には向かないと思いますよ。

画面の更新を停止する事で、対象ファイルを開いても開いたように見せずに処理を行い
終わったらそのファイルを閉じてしまえばいいと思います。

(ウッシ) 2015/05/21(木) 11:28


 衝突しましたけど、アップします。

 そもそも

 With MsgBox なんたら

 これはないでしょう。 MsgBox って何を意図しているのですか?

 で、コード中にスペースが入っているのはアップ時のトラブルだとしても 文字列中の " は "" じゃないといけませんね。

 で、根本的には、開いていないブックのシートに With をかけて、それを、通常のシートと同じようにセル参照するということ自体が不可能です。

 ウッシさんがいわれるとおり、セル参照そのものをExecuteExcel4Macro を使って行うことになります。

(β) 2015/05/21(木) 11:41


シート名を書くべきところで、何故かシートオブジェクトを指定、しかもオブジェクトを表す文字列になっており、全然変ですね。

ところで、ExecuteExcel4Macroによるセル参照は、1セルだけ抜くような場合には便利ですが、それ以外は有効ではないです。
以下のほうが元と変わらないので判りやすいし、何セルでも好きなだけコピーできますが、いかが?
(動作確認はしていません)

 Sub Macro1()
    With Worksheets.Open("C:\渉外担当者実績表(実績・行動検討資料).xls", False, True)
        With .Sheets("見出し(簡易表)")
            Sheets("年月順位 ").Range("O5:O41").Value = .Range("R12C7:R12C43").Value
            Sheets("年月順位 ").Range("P5:P41").Value = .Range("R14C7:R14C43").Value
        End With
        .Close
    End With
 End Sub
(???) 2015/05/21(木) 12:52

みなさま、コメントありがとうございます。
アンポンタンな質問で申し訳ありませんでした。

???さんのコードを実行してみたところ
メソッドまたはデータメンバがみつかりません
というエラーが出ました。
パスもファイル名もあっているので何が原因なのかわかりませんでした。

このコードを参考にして色々また調べてみました。

Sub Macro1()

Dim strBookName As String

    Workbooks.Open "C:\Users\個人情報のため伏せます\Desktop\渉外実績表(加工)\渉外担当者実績表(実績・行動検討資料).xls"
    strBookName = ActiveWorkbook.Name

    With Sheets("見出し(簡易表)")
       ⇒Sheets("年月順位 ").Range("O5:O41").Value = .Range("L7:L43").Value
         Sheets("年月順位 ").Range("P5:P41").Value = .Range("N7:N43").Value
                            ・
                            ・
                            ・
    End With

        Workbooks(strBookName).Close SaveChanges:=False
End Sub

これでやってみたところ、渉外担当者実績表(実績・行動検討資料)ファイルは開きましたが、
肝心のコピペ処理手前で動きが止まります。
デバッグを押すと「⇒」が黄色くなります。

もともとこのファイル、「このブックには更新できないリンクが1つ以上含まれています」というメッセージが出てました。
そのせいでマクロの実行がストップしてしまうのかなと思い、メッセージを毎回表示せず、自動更新する設定に変えて保存しました。

ファイルを直接開くと、上記のメッセージが出ることはなくなったのですが、
マクロ実行でファイルが開くときには、メッセージが出て、実行がストップしてしまいます…。
何かよい対策はありますか。
(ぺもと) 2015/05/21(木) 15:49


 もう1つ、重要なことですけど、A1形式、R1C1形式は、セルを指定する方式ですがVBA内で
 Range(●) の●としては A1形式のみが記述可能です。
 R1C1形式は、VBA関数等に引数を与える、あるいはプロパティに値をセットするその時の文字列として(必要であれば)使うことができます。

 ちなみに、ExecuteExcel4Macro に与える引数内のセルアドレスは、R1C1形式記述でないといけませんが。

(β) 2015/05/21(木) 16:02


 >>マクロ実行でファイルが開くときには、メッセージが出て、実行がストップしてしまいます

 Workbooks.Open の引数に UpdateLinks があります。調べてみましょう。

 それと

 >>個人情報のため伏せます

 ここに、当該PCのユーザプロファイルIDをハードコーディングしているんですね。
 このままでは、別のPCで実行できませんよ。
 Environ関数 や WScript.Shell の SpecialFolders メソッド で、これらフォルダパスを
 動的に取得してください。

(β) 2015/05/21(木) 16:13


お返事ありがとうございます。

リンクの更新の問題は解決しました。ありがとうございます。

「Environ関数 や WScript.Shell の SpecialFolders メソッド」
こちらをもう少し勉強してみます。
(ぺもと) 2015/05/21(木) 16:59


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.