- ベストアンサー
エクセル:Application.ScreenUpdatingについて
マクロでCSVファイルを開き、CSVファイル上で一部の操作したいのですが、 画面には開いたCSVファイルを表示させたくないです。 Application.ScreenUpdating = False csvFile.Activate Application.ScreenUpdating = True ※csvFileは、開いたCSVファイルにセットした名称 上記のように、CSVファイルをアクティブにしている部分をApplication.ScreenUpdatingで挟んでいるのですが、 CSVファイルが表面に出てきてしまいます。 MsgBox "まえ" csvFile.Activate MsgBox "うしろ" と記述すると、 「まえ」のメッセージボックスの『OK』をクリックするとCSVファイルが表面に表示され、 その上に「うしろ」のメッセージボックスが表示されるので、 CSVファイルを表面に出しているのは csvFile.Activate のコードで間違いないと思います。 表示させたくないファイルをわざわざアクティブにしているのは、 自分の知識ではアクティブにしないとそのファイル上での操作ができないためです。 シートの切り替えなどは Application.ScreenUpdating = False で止めることができるのですが、別ファイルの場合は止められないのでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
えっと、、、 画面描画を止めて、すぐに戻してるので表示されるのでは? 試してないけど、 Application.ScreenUpdating = False csvFile.Activate Thisworkbook.Activate Application.ScreenUpdating = True とか。 それよりも Open からのコードを出された方が良いアドバイスが得られるかも。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
質問が長いが、下記では、私のおおぼけかな。 下記やってみると いまSheet3がアクチブになっている場合 Sub test01() ActiveSheet.Visible = False 'ActiveSheet.Range("A10") = "aaaaaa" 'error 別のシートに値がセットされる Worksheets("Sheet3").Range("A10") = "DDDDDD" End Sub 非表示状態でも Worksheets("Sheet3").Range("A10") = "DDDDDD" は有効のようなので、初めにシートを非表示にすればどうかな。 ActiveSheetは意図どおりにならないから使わず、具体指定する。
お礼
回答ありがとうございます。 質問長かったでしょうか。 「始めにシートを非表示にする」とのことですが、今回開きたいCSVファイルはシートが1つしかなく、 非表示を断られてしまいました。 何か方法があるのだと思いますが、解決しましたので締め切らせていただきます。
お礼
回答ありがとうございます。 理由がよくわかりませんが、提示していただいたようにThisworkbook.Activateを追加したところ思ったような動作をしました。 csvFile.Activateでアクティブにしており、 アクティブの副産物として(?)アクティブにしたファイルが表面に出るので、 それをScreenUpdating = False&Trueで挟んで止めたつもりだったのですが。 ソースを全部挙げるほうが回答しやすいであろうことは理解しているのですが、 長くなると全部挙げるわけにいかないので、 素人考えで「ここは必要無いだろう」と判断して削っているのですが、 巧く行かないものですね、申し訳ないです。 (今回、MsgBoxで試したように、その部分が問題なんだと思い込んでまして)