[[20111102113521]] 『閉じているブックからのシートコピー』(龍) ページの最後に飛ぶ

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

 

『閉じているブックからのシートコピー』(龍)

 https://www.excel.studio-kazu.jp/kw/20030812103955.html

 上記を参考として、
 デスクトップ上にある両ファイルを下記のように設定してみましたが、

Sub マクロD()

  Workbooks.Open (ThisWorkbook.Path & "\" & "最新出荷記録.xls")
  Worksheets("最新出荷記録").Copy("受注一覧表20110916.CSV").Sheets (2)

 End Sub

 [worksheetクラスのcopyプロパティを取得できません] 
 という結果になってしまいました。

 初心者なので、どこが悪いのか見当がつきません。
 どなたか理由を教えていただけませんでしょうか、
 宜しくお願いします。

excel 2007
viata


 まず、「両ファイル」というのは最新出荷記録.xlsと受注一覧表20110916.CSVだね。
で、「デスクトップ上にある」とのことだけど、最新出荷記録.xlsについては ThisWorkbook.Path & "\" だから
このマクロが書かれているマクロブックが保存されているフォルダから読み込んでいる。
このマクロブックがデスクトップに保存されているなら、それでいいんだけど。

 次に、Worksheets("最新出荷記録").Copy("受注一覧表20110916.CSV").Sheets (2)
この行では、具体的に何をさせようとしているのか、言葉で説明してみてくれる?

 (ぶらっと)

説明が悪く、申し訳ありません。
 「最新出荷記録」というブックにある「最新出荷記録」というシートを
 "受注一覧表20110916.CSV"というブックの3番目のシートに
 「移動してコピー」をさせようとしています。(既にブック内に2つのシートが
 存在していますので、末尾だと3番目です)
 二つともデスクトップに貼り付けております。
  "受注一覧表20110916.CSV"を開いてマクロを行っている一環で、
 最初は閉じてある「最新出荷記録」自動で立ち上げ、上記を行いたいです。
 ご確認をお願いします。

 (龍)

 ん?CSVって、あまりつかわないので苦手だけど、ワークブックとして扱う場合のシートって1枚じゃなかった?

 本当に、"受注一覧表20110916.CSV"を開いた時にシートが2枚あるの?

 それと、処理は以下でいいの?

 1.デスクトップ上にある"最新出荷記録.xls"を開いて
 2.もう1つ、、やはりデスクトップ上にある受注一覧表20110916.○○○ を開いて (これ、ほんとにCSV?)
 3.最新出荷記録.xlsの「最新出荷記録」シートを2.で開いたブックの末尾のシートとしてコピー。
  (移動って書いてあるけど移動が必要?)

 (ぶらっと)

すみません、説明不足でした
 受注一覧表20110916.○○○を開いたときは一枚のシートです。
 今回行いたいマクロの前の別のマクロで元シートをコピーして2枚にしています。
 なお、ブックの表示は、種類:excel csvファイルとなっています。

 2.もう1つ、、やはりデスクトップ上にある受注一覧表20110916.○○○ を開いて (これ、ほんとに CSV?)
 ここで受注一覧表20110916.○○○は、既に開いており、これに先立つマクロを実行している状態です。
 ですから受注一覧表20110916.○○○は、閉じている状態である必要はありません。

 (移動って書いてあるけど移動が必要?)

 移動は、必要ありません。
 すみません
 受注一覧表20110916.○○○の2枚目シートの後にコピーで結構です。
 宜しくお願いします。
(龍)

 >上記を参考として
 と言う事ですが、その過去ログでは
 「Worksheets("あ").Copy After:=Workbooks("いいい.xls").Sheets(1)」
 と成っています。
 書いておられるコードは↓なので、ファイル名等を合わせたとすると
 Worksheets("最新出荷記録").Copy("受注一覧表20110916.CSV").Sheets (2)

  Worksheets("あ").Copy("いいい.xls").Sheets (2)

 おそらく、抜けている部分が原因だと思います。
 良く見比べてみてください。

 (HANA)


 csvファイルでもエクセル上ではワークブック扱いだからシートは何枚でも追加できるけど、
最終的に、そのcsvファイルをどうするの? csvとして保存するの? できないよ。
csvは1枚しかシートがもてないので、保存時にアクティブになっているシートだけで保存されてしまうよ。

 (ぶらっと)

HANAさん
 ご教授ありがとうございます。
 申し訳ありませんが、教えていただいた上記の内容が理解できません。
 参考にしたサイトは、ファイルの場所が、マイドキュメントとなっていましたが、
 私は、デスクトップ上に2つのファイルを置いています。

 Sub テスト()
 Workbooks.Open (ThisWorkbook.Path & "\" & 最新出荷記録 ".xls")
  Worksheets("最新出荷記録").Copy _
     After:=Workbooks("受注一覧表20110916.csv").Sheets(3)
 END SUB

 として、マクロを実行したら「構文エラー」と出ました。
 また、(ThisWorkbook.Path & "\" & 最新出荷記録 ".xls")の部分が何を指すのか

  意味が分かっていません。
 申し訳ございませんが、上記意味も含めて教えていただけたらありがたいです。
 宜しくお願いします。

 ぶらっとさん
 ご教授ありがとうございます。
 受注一覧表20110916.CSVは、最終のマクロでEXCEL97-2003として保存したいと考えているのですが、
 そのやり方でも大丈夫でしょうか、

 (龍)


 先にコードの完成の方から。。。。

 このコードは2つの部分から出来ていますね。
 (1).「最新出荷記録.xls」を開く
 (2).シートをコピーして、受注一覧表20110916.csvに貼り付ける

 「構文エラー」と出た時、(1)の方に関する部分が赤文字で表示されていませんか?
 最初に載せておられるコードでは、その部分は 黒文字でしたよね?
 元に戻してください。

 それから、(2)の方に関しては 最初は.Sheets(2)でしたが、今回は.Sheets(3)に成っています。
 これは分かって変更しましたか?

 最初に載せておられたコードは(1)の部分は実行されて(2)を実行しようとしたときに
 >worksheetクラスのcopyプロパティを取得できません
 のエラーがでましたね?

 ですから、まずは 最初のコードで試した時と同じ状況にして
 私が指摘した部分だけを修正して やってみてください。

 それとも、最初のコードで試した時の状況 が既に再現出来ないですか?
  マクロを入れたブックを何処に保存していたか? とか
  実行する前に csvファイルにいくつシートが有ったか? とか
  覚えていますか?

 (HANA)

HANA様
 ご教授ありがとうございます。

Sub マクロD()

 Workbooks.Open (ThisWorkbook.Path & "\" & "最新出荷記録.xls")
  Worksheets("最新出荷記録").Copy After:=Workbooks("受注一覧表20110916.CSV").Sheets(2)
 End Sub
 
 やってみましたが、インデックスが有効範囲にありませんというエラーになりました。
  (1).「最新出荷記録.xls」を開く⇒上手くいきました。
 コピーするファイルの受注一覧表20110916側に問題がありそうです。     

 コピーするファイルの受注一覧表20110916は、プロパティで「Microsoft Office Excel CSV ファイル     (.CSV)」とでました。
 C:\Users\私のユーザー名\Favorites\Desktopです。
 コピーするファイルの受注一覧表20110916は、当該マクロを行うまでは、シートは2枚しかありません。
 (龍)


 現段階で、拡張子が CSV な事は問題ないと思います。

 「インデックスが有効範囲にありません」のメッセージで簡単に思いつく所は

 1.最新出荷記録.xls の中に「最新出荷記録」と言うシート名のシートが無い
 2.受注一覧表20110916.CSV の中に、シートが1枚しか無い
 3.最新出荷記録.xlsを開いて、コピーされるまでの間に 別のファイルがアクティブになり
   そのファイルに「最新出荷記録」と言うシート名のシートが無い

 ブックを開いて((1)のコードが終わって)、
 コピー作業に移る前((2)のコードに移る前)に
    MsgBox ActiveWorkbook.Name
    MsgBox Worksheets("最新出荷記録").Name
    MsgBox Workbooks("受注一覧表20110916.CSV").Sheets.Count
 こんなコードを入れて
  アクティブに成っているブックのブック名
  そのブックに「最新出荷記録」と言うシートがあるか
  「受注一覧表20110916.CSV」には何枚シートがあるか
 期待した結果が表示されるか、確認してみて下さい。

 こちらで環境を整えて 載せてもらったコードを実行する限りではエラーは出ません。

 (HANA)

 HANA様
 ご教授ありがとうございました。
 いただいたコードを試してみたら、下記のところで同じように
 「インデックスが有効範囲にありません」

 MsgBox Workbooks("受注一覧表20110916.CSV").Sheets.Count
なりました。
 ファイルはEXCEL CSVとなっていますが、CSVとは異なるものなのでしょうか?
 ちなみにこのコードは、受注一覧表20110916.CSVの標準モジュールの中に
 置いており、受注一覧表20110916.CSVをマクロで加工している途中で、
このコードを利用しようとしています。
(龍)


 ん?なんか微妙な表現ですね。

 >ちなみにこのコードは、受注一覧表20110916.CSVの標準モジュールの中に
 >置いており
 と言う事ですが、CSVファイルにはマクロは保存できないですよね?
 ですから、「受注一覧表20110916.CSV」を開いた段階では
 標準モジュールすら無い状態だと思いますが、マクロでの加工途中に
 このマクロも追加するのでしょうか。。。?
 それとも、今はテスト段階だからその位置に有るという事かな。。。?

 先にファイル名を確認してみるのが良いかもしれません。
 受注一覧表20110916.CSV は事前に開いてあるのですよね?
 このファイルをアクティブにして
    MsgBox ActiveWorkbook.Name
    MsgBox ActiveWorkbook.Name = "受注一覧表20110916.CSV"
 この二つを実行してみて下さい。

 上側のコードで、ファイル名が表示されます。思っているファイル名と一致していますか?
 下側のコードで、マクロで指定したファイル名と実際のファイル名が一致するか確認して結果が表示されます。
  true だったら、一致。false だったら、不一致です。
  実際は、拡張子の大文字・小文字は考慮されませんが 今回は簡易検査なので 適宜変更して確認して下さい。

 (HANA)

HANA様
 falseと出ましたが、解決しました。
 受注一覧の前に自分の名前を入れていたのですが、
 ネットに出すので消していたのを
 気がつきませんでした。
 名前を修正し、無事に実行できました。
 お手数をおかけし、申し訳ありませんした。
 本当にありがとうございました。
 {龍}

 それは気づいていただけて良かったです。

 で、保留にしていた部分ですが。。。

 >(ThisWorkbook.Path & "\" & "最新出荷記録.xls")の部分が何を指すのか 
 > 意味が分かっていません。

 ThisWorkbook と言うのは、マクロが書いてあるブックの事です。
 その Paht なので、マクロが書いてあるブックの保存場所 の事です。

 >ちなみにこのコードは、受注一覧表20110916.CSVの標準モジュールの中に置いており
 と言う事なので、受注一覧表20110916.CSV のPath(保存されている場所)です。

 >二つともデスクトップに貼り付けております。
 と言う事なので、デスクトップのPath が取得出来るはずです。

 と言う説明で分かりますか?

 ちなみに
 『ThisWorkbook と言うのは、マクロが書いてあるブックの事です。』
 ですから、ご説明の通りであれば Workbooks("受注一覧表20110916.CSV") の事です。

 この部分は
 Worksheets("最新出荷記録").Copy After:=Workbooks("受注一覧表20110916.CSV").Sheets(2)
 この様に書けます。
 Worksheets("最新出荷記録").Copy After:=ThisWorkbook.Sheets(2)

 すると「受注一覧表20110916」部分を毎回変更する必要が無くなりますが
 実際の運用を考えると
 「ちなみにこのコードは、受注一覧表20110916.CSVの標準モジュールの中に」
 と言う状況は、考えにくいですね。
 どの様になる予定なのでしょう?

 (HANA)


コメント返信:

[ 一覧(最新更新順) ]


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