Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


890 / 13645 ツリー ←次へ | 前へ→

【77699】非表示の別ブックにシートコピーできない yy 15/12/1(火) 10:47 質問[未読]
【77701】Re:非表示の別ブックにシートコピーできない γ 15/12/1(火) 21:02 発言[未読]
【77704】Re:非表示の別ブックにシートコピーできない yy 15/12/2(水) 8:37 質問[未読]
【77706】Re:非表示の別ブックにシートコピーできない マナ 15/12/2(水) 21:13 発言[未読]
【77708】Re:非表示の別ブックにシートコピーできない yy 15/12/3(木) 9:34 質問[未読]
【77712】Re:非表示の別ブックにシートコピーできない マナ 15/12/3(木) 21:15 発言[未読]
【77713】Re:非表示の別ブックにシートコピーできない yy 15/12/4(金) 8:10 回答[未読]
【77714】Re:非表示の別ブックにシートコピーできない マナ 15/12/4(金) 20:46 発言[未読]
【77707】Re:非表示の別ブックにシートコピーできない γ 15/12/2(水) 21:27 発言[未読]
【77709】Re:非表示の別ブックにシートコピーできない yy 15/12/3(木) 9:37 質問[未読]

【77699】非表示の別ブックにシートコピーできない
質問  yy  - 15/12/1(火) 10:47 -

引用なし
パスワード
   自分のExcelブック(自ブック)からVBAで、
もう1つ別のExcelブック(他ブック)を非表示で開いて、
自ブックと他ブックの間でシートをコピーしたいのですが、
他ブックのシートを自ブックにコピーすることはできるのですが、
自ブックのシートを他ブックにコピーするとなぜかエラーになります。
例えば、以下のsampleで、
(A)では、正しくシートがコピーされるのですが、
(B)では、
「実行時エラー'1004' WorksheetクラスのCopyメソッドが失敗しました。」
というエラーになります。
なぜ(A)はOKなのに(B)ではエラーになるのでしょうか。
(B)の部分をどのように記述すればよいのでしょうか。

よろしくお願いします。(Windows7,Excel2010)

--------------------------------------------------
Sub sample()

 Dim ExcelBook As Excel.Workbook
 Dim FileNameFullPath As String

 FileNameFullPath = ThisWorkbook.Path & "\Book1.xlsx"
 Set ExcelBook = Workbooks.Open(FileNameFullPath, UpdateLinks:=0)

 Application.Windows("Book1.xlsx").Visible = False

 '他ブックのシートを自ブックにコピーする (正常)
 ExcelBook.Worksheets("Sheet1").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) '<-(A)

 '自ブックのシートを他ブックにコピーする (エラー)
 ThisWorkbook.Worksheets("Sheet1").Copy after:=ExcelBook.Sheets(ExcelBook.Sheets.Count) '<-(B)

 Application.Windows("Book1.xlsx").Visible = True

 Application.DisplayAlerts = False
 ExcelBook.Save
 ExcelBook.Close
 Application.DisplayAlerts = True
 Set ExcelBook = Nothing

End Sub
--------------------------------------------------
(注記1) Application.Windows("Book1.xlsx").Visible = False
    の部分を、
    Application.ScreenUpdating = False
    にすると、このエラーは起きませんが、
    タスクバーに表示されてしまいます。
(注記2) Set ExcelBook = Workbooks.Open(FileNameFullPath, UpdateLinks:=0)
    の部分を、
    Dim objEX As Excel.Application
    Set objEX = CreateObject("Excel.Application")
    Set ExcelBook = objEX.Workbooks.Open(FileNameFullPath, UpdateLinks:=0)
    のうに、別インスタンスで開くと、このエラーは起きませんが、
    別インスタンス間ではシートのコピーができません。
(注記3) シートのコピーをコピー&ペーストの機能で代用すると、
    セルに施されているフィルターなどの設定が外れてしまいます。

【77701】Re:非表示の別ブックにシートコピーでき...
発言  γ  - 15/12/1(火) 21:02 -

引用なし
パスワード
   解決策ということでもないのですが、
それは仕様のようですから如何ともしがたいでしょう。
コピーしてから非表示にするとか、別の方法で対応してはどうでしょう。

【77704】Re:非表示の別ブックにシートコピーでき...
質問  yy  - 15/12/2(水) 8:37 -

引用なし
パスワード
   γ さん:早速のご回答有難うございます!

その仕様の内容をもう少し詳しく教えてほしいのですが、

「非表示のブックからシートのコピーはできるが
 非表示のブックへのシートのコピーできない。」

という仕様になっているということでしょうか。

よろしくお願いします。

【77706】Re:非表示の別ブックにシートコピーでき...
発言  マナ  - 15/12/2(水) 21:13 -

引用なし
パスワード
   ▼yy さん:

少しだけ試してみました。

非表示ブックに対して
・シートの追加、削除はできそうですが
・コピー、移動はできないみたいです

【77707】Re:非表示の別ブックにシートコピーでき...
発言  γ  - 15/12/2(水) 21:27 -

引用なし
パスワード
   仕様のようだと申し上げた。あくまで私見だ。
あなたと論争するつもりもないし、何の益もない。
こんな話はいくらでもある。
仕様であるかどうかをハッキリさせたいという必要性を感じているなら、
MS社に問い合わせるのが筋だ。聞く相手が違う。
事実が判明したら、皆さんに報告すると満足する人もいるかもしれない。

仕様だろうがバグだろうが、そのように動作すること自体は事実なので、
そして、その動作自体を変えることはできないんだから、
私にとっては、そんな境界線の話はどうでもいい。
それよりも一時的に表示にして作業後に非表示にすれば済むことだと
思っている。以上。

【77708】Re:非表示の別ブックにシートコピーでき...
質問  yy  - 15/12/3(木) 9:34 -

引用なし
パスワード
   ▼マナ さん:

非表示ブックにシートをコピーすることができるケースもありますよね?

【77709】Re:非表示の別ブックにシートコピーでき...
質問  yy  - 15/12/3(木) 9:37 -

引用なし
パスワード
   ▼γ さん:

仕様を確認したのは、
非表示ブックにシートをコピーすることができるケースもあるからです。

sampleでは1つのExcelファイルだけを開いていますが、
実際のプログラムでは、複数のExcelファイルを順番に
開いて閉じる処理を繰り返しています。
このため、プログラム実行中の間、
常にタスクバーがちらちら動いて、
見苦しいので非表示にしたかったのです。
一時的に表示にして作業後に非表示にもしてみましたが
タスクバーはちらちら動いています。

【77712】Re:非表示の別ブックにシートコピーでき...
発言  マナ  - 15/12/3(木) 21:15 -

引用なし
パスワード
   ▼yy さん:

>非表示ブックにシートをコピーすることができるケースもありますよね?

そうでしたか。ごめんなさい。
トラブったときが心配ですが、マクロブックも非表示では嫌ですか。

Application.Visible = False

【77713】Re:非表示の別ブックにシートコピーでき...
回答  yy  - 15/12/4(金) 8:10 -

引用なし
パスワード
   ▼マナ さん:

マクロブックは1つのツールのような感じになっていて、
設定シートというシート上に、実行ボタンや
対象フォルダや実行条件の設定項目が配置されていて、
これを設定してマクロを実行する感じになっています。
フォルダの中のファイル数にもよりますが、
処理が終わるまでにある程度の時間が(数分から1時間程度)
かかるためステータスバーに進行状況を表示しています。
今、どのような条件で実行させているのかが分かるように、
設定シートの画面は表示させておきたいです。

【77714】Re:非表示の別ブックにシートコピーでき...
発言  マナ  - 15/12/4(金) 20:46 -

引用なし
パスワード
   ▼yy さん:

数分から1時間程度かかるのであれば、
そもそも画面を見続けるわけではないと思うので
ステータスバーのちらつきが気になるものなの?
という気がしますが…

ユーザーフォームを表示させておいて、
プログレスバーやラベルで
進捗状況、現在の条件等を確認できるようにする
という案はどうでしょうか。

いろいろ考えたうえでの質問のようなので
私なんかがアドバイスできそうになく、これで最後にします。

890 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free