- ベストアンサー
Excel2007のSheets.Copyコマンド不具合?
- Excel2007のSheets.Copyコマンドを使用すると、コピーされたブックが表示されてしまう不具合が発生しています。
- 特にWindowsXP sp2の環境で発生する問題であり、他のバージョンでは正常に動作します。
- VB6やAccessからExcelを遠隔操作で処理する場合にも同様の問題が発生し、処理が停止してしまいます。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
またまたmyRangeです。 回答4の最後の >そしてまた、 >予めあるシートに雛形をコピーするのであれば >sheets("雛形").cells.copy sheets("New").Range("A1") >のようにシートそのもののコピーではなく、シートのセルをコピーしてやればいいのではないでしょうか これは、セルのコピーなら問題ないようですね、という程度のことですので流してください。 以上です。
その他の回答 (6)
- end-u
- ベストアンサー率79% (496/625)
>同様の処理をVB6や、AccessからExcelを遠隔操作で処理するとBookが表示された瞬間に、 >何らかのきっかけでフォーカスが与えられると処理が止まってしまい... この辺りの検証はやってませんけど、取り敢えず簡易的に回避するなら Sub Macro1() Dim i As Long Dim L As Double With Application i = .WindowState .WindowState = xlNormal L = .Left .Left = -.Width Sheets.Copy Before:=Sheets(1) MsgBox "コピー完了" .Left = L .WindowState = i End With End Sub #〆め切る時はマルチ先にも配慮なさったほうが良いかと思います。
お礼
ロジック的には上記で教わったように WindowStateを弄る事で限界かと思いました。 結局ウインドウを最小化した状態でも何故か、マウスの連打などを行うと、消えている(最小化した)はずの画面にフォーカスを与えてしまい、解決にはならなかったです。 で、他のパソコンを使い、試行錯誤してい間に次のような事が判明しました。 Office2003がインストールされているPCにOffice2007をインストールした場合には現象が出ない事が判明しました。 なので、 ・一旦2007をアンインストール ・その後、2003をインストール、 ・さらに、2003を削除しての ・最後に2007のインストール と言うような手順で今回の問題は解決しました。 具体的な原因がわからないままの解決となりましたが、どうやらプレインストール状態のOfficeがダメだった可能性があります。 とにかく、私なりの解決になりましたのでここへ報告いたします。 そして皆さんありがとうございました。
- myRange
- ベストアンサー率71% (339/472)
またまたまた、myRangeです。 >私の説明あ下手な様で、皆さんが症状を理解されていないようなので いえいえ、最初の質問でちゃんと理解しております(人並みに理解力はある。。つもり?) ただ、現象だけの質問で、そのエクセルの運用方法が書いてなかったので あれやこれや推測しなければならなかったわけで。。。 質問の件はどうも仕様(バグ?)のようなので運用面からの提案。 >例えば10毎の伝票を打つような場合、ひな形シートを10回コピーする必要があると言う事です。 1回の処理で最大何回のコピーが必要になるのでしょうか? 例えば、最大31回のコピーが必要だと仮定した場合 (1)予め最大数(31枚)の雛形シートのあるテンプレートを作成しておく (2)今回必要なのが10枚だとしたら、色々な処理の後、 エクセルを表示する時点で不必要な残りのシートは削除する 当然ながら雛形のサイズの問題は出てきますが、、、 これくらいしか思いつきませんのでこれが最終回答?となります。 お役に立てず申し訳ないことです。 何とかうまい方法が見つかるといいですね。 以上です。
- myRange
- ベストアンサー率71% (339/472)
回答3、myRangeです。 当然やってますよね。 小学生並みの回答、申し訳ありませぬ。 で、今度は高校生程度の回答を。。。 >ひな形シートが作成してあるテンプレートを開く >ひな形シートコピー >書込み これだけでは全体の流れが分かりかねます。 Excelでテンプレートといえば、xlt(xltx)を思い浮かべますが、 それだとそれ自身が雛形であるわけですから、雛形シートのコピーは必要ないので xltではないと考えますが、どうでしょう。 それから、このExcelブックはこのプログラムを実行するたびにシートが増えていくのでしょうか 増えていかないのであれば、xlt(xltx)にしておけばコピーの必要はないですよね。 増えていくのであれば、Save時に次回のために雛形をコピーしておけばいいような気もしますが。。 そしてまた、 予めあるシートに雛形をコピーするのであれば sheets("雛形").cells.copy sheets("New").Range("A1") のようにシートそのもののコピーではなく、シートのセルをコピーしてやればいいのではないでしょうか 以上です。
- myRange
- ベストアンサー率71% (339/472)
Copyメソッドの直後に、再度消してやるというのは拙い? Excel.Application.Visible = False Call Sheets.Copy(Before:=Sheets(1)) Excel.Application.Visible = False '●再度消す MsgBox "コピー完了" Excel.Application.Visible = True 以上です。
補足
ありがとうございます。 こういった処理もやってみましたが、 すると、明らかに画面が一度表示された後に消えるので、具合が悪いです。 同様の現象で悩んでいる方が他にも居ても良さそうですが、事例が見つかりません。 ちなみに、実際の処理では ・バックグラウンドでエクセルを起動 ・ひな形シートが作成してあるテンプレートを開く ・ひな形シートコピー ・データ書き込み こんな事をやっているわけです。
- KURUMITO
- ベストアンサー率42% (1835/4283)
Excel.Application.Falseはコードを走らせている間の画面表示をなくする機能ですね。それを解除するに当たっては解除したときに表示してほしいシートを選択しておくことの操作をEXcel.Application.Trueの前に設定しておくことが必要でしょう。
補足
>それを解除するに当たっては解除したとき 解除する前にBookが見えちゃうのが問題なのです。 つまり、上記のコードで行くと「 "コピー完了"」のメッセージボックスの直前にVisible=falseが解除されてしまう事が問題(=不具合だと思う)なのです。 ちなみに、メッセージボックスを出さなくともVisible=false解除されます。 現象をわかりやすくする為に出来る限り完結に書いたのが上記コードです。 説明ヘタで申し訳ないです。
- KURUMITO
- ベストアンサー率42% (1835/4283)
Excel.Application.Visible = True の前に元の画面に戻しておくことが必要に思いますね。
補足
回答ありがとうございます。 >の前に元の画面に戻しておくことが必要に思いますね。 申し訳ありません、意味が解らないのでもう少し説明していただけるとありがたいです。 また、説明不足を補足します。 実際にはSheets.Copyを行った後に沢山の処理をその新規シートに対して行っています。 そして、その処理の最中は画面を表示したくないのです。 完全に処理が終わってから、エクセルを表示したいのです。
補足
私の説明あ下手な様で、皆さんが症状を理解されていないようなので、もう少し説明を追加します。 私が一番の問題としているのが 「Excel2003と、Excel2007で動作が違う」と言う事です。 それがどんな症状かというと以下の通りです。 ObjectExl.Application.Visible = False・・・・・・・・・・・・・ここからBookは不可視となる Loop Call ObjectExl.Sheets("Tmp").Copy(Before:=ObjectExl.Sheets("Tmp"))・・・・・・・(A) ・・書き込み処理・・ End Loop ObjectExl.Application.Visible = True・・・・・・・・・・・・本来はここでBookが可視状態になる という動作のはずですが、「Excel2007では(1)時点でBookが可視状態になってしまう。」ことが問題なのです。 >>Excelでテンプレートといえば、xlt(xltx)を思い浮かべますが、 についての回答です。 そうです。(xlt)を利用しています。そこにはひな形のシートが一つのみ有ります。 何故テンプレートを開いた上で更にシートのコピーをする必要があるかというと、同じシートを複数作る場合があるからです。 例えば10毎の伝票を打つような場合、ひな形シートを10回コピーする必要があると言う事です。 これらの事がExcel2003では思い通りに動作していたので困っているのです。 ちょっと解決しそうに有りませんね ちなみに、マイクロソフトの無償サポートでは相手にされませんでした。