• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:IEからマクロを実行した際の不具合について)

IEマクロ実行時の不具合について

このQ&Aのポイント
  • IEからマクロを実行した際にExcel表が消える現象が特定のパソコンで発生しました。
  • 現象が解消した原因は、マクロ内の「ScreenUpdating」の記述を削除することでした。
  • ネットでの情報収集では正確な情報が見つからず、Microsoftのサポートページを参照しましたが、解読が難しい状況でした。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

そもそも、ScreenUpdating を使う必要があるかどうかですね。 使ってはいけないものがありますね。それは、最初からExcelの画面が動いていない場合や、MsgBox など対話型にする場合や、Window が別の場所に行く場合です。ScreenUpdating =False は、シート枠の中が真っ黒になったりしますね。IEからマクロを実行という意味が良く分かりませんが、IE上で、マクロを使う場合は、メモリが制限されているのだから、どんな動きをするか分かりませんね。Off Line のような本格的なマクロを使うというわけには行かないような気がします。 使ってよいのは、Excelなどの表を上から下とかいうように、特定の範囲でセルをひとつずつ、オブジェクトから、そのプロパティを取得する場合に使うのです。 > Set xRange = Selection  'Set a variable to the active selection > Range("IV65536").Select 'Select another cell in the sheet > xRange.Select       'Select the original range 単に、セルの場所を移動するだけだと思いますが、今さらIE3.0 でもないだろうと思いますし、こんなコードが必要だと思えません。 そのコードは、一旦、右端下隅にセルを移動してファイルを実体化させ、Excel側にメモリを渡すものだと思いますが、あまり関心しない内容ですね。ふつう、ある程度の大きさを持つものなら、それを強制的に大きくする必要はないと思います。 単に、 ActiveSheet.Select Application.ScreenUpdating = True End Sub か、 Application.Visible = True Application..ScreenUpdating = True End Sub としてみたらどうかと思います。 >IEのバージョンは「7」でした。 悪評のIE7は、どうやら最初から最後まで、トラブル続きだったようですから、なんとも言えませんね。

sekkii
質問者

補足

ご回答ありがとうございます!! もうこれ以上回答してもらえないかと諦めていましたのでまるで天使が現れたような気分です♪ まずは補足説明から。 >IEからマクロを実行という意味が良く分かりませんが 社内ネットワークで、あるページに「実行」ボタンが設置してありまして、ボタンを押すと「マクロを含むExcelブック」「結果を表示するExcelブック」「データCSV」が自パソコンに保存され、自動で「マクロを含むExcelブック」がOPENされます。 AUTO OPENになっていますので、自動でマクロが始まるといった流れです。 この保存されたブックをIEを介さずに開けばすんなりいくのですが、IEの実行ボタンから実行すると、「パッと」消えてしまうんです。 ご指摘の通り、MsgBoxやユーザーフォームで対話型にしています。 ScreenUpdatingを使いたい訳は、そのパソコンがとても古くて実行時間がかなりかかる為です。 しかし耐えられない程ではないので、現在は外しています。 なにはともあれWendy02さん! わかりやすい解説ありがとうございました。 不明なコードのご説明もありがとうございました!!スッキリしました! さらに解決策までご提示していただき感謝いたします! 嬉しくて早くお礼が言いたくてまだ試してないので これから試してみますね。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

>ScreenUpdatingを使いたい訳は、そのパソコンがとても古くて実行時間がかなりかかる為です。しかし耐えられない程ではないので、現在は外しています。 この部分は、ScreenUpdating を使わないで、逃げる方法があるのです。コードは直せるはずです。 '// Sub Test1() Dim i As Long For i = 1 To 30000  Cells(i, 1).Value = i Next i End Sub '// Sub Test2()  Dim i As Long  Dim Ar(30000) As Long  For i = 1 To 30000   Ar(i - 1) = i  Next i  Cells(1, 1).Resize(30000) = Application.Transpose(Ar) End Sub Test1 は、8分(8分43秒)掛かりました。ScreenUpdating を入れると、約22秒です。Test2は、だいたい平均すると、10分の1秒で完了します。こちらは、XPで、Excel 2003ですが、負荷として、UserForm を立ち上げたり、12MのExcelブックを開けていた状態です。Test2 は、ScreenUpdating は必要ありません。

sekkii
質問者

お礼

2度も回答して頂いてすみません。 とても有難いです! 配列を利用するのですね。こんなに早くなるんですか…。 今回のこのマクロも配列を利用できる部分がありますので参考にさせていただきます♪ ただ、遅くなっている原因はいくつかあって、 ・罫線を引く ・ピボットテーブル作成 ・1つのシートを非表示に ・CSVデータをExcelにコピー&ペースト などです。 先ほど教えていただいたコードは例のパソコンが使用中なため試せていませんがコードは変更しておきましたので後は例のパソコンで実行ボタンを押すだけです。 いろいろありがとうございました! 本当に感謝しています。

  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.1

(リンク先に書いてないこと) ScreeUpdating というのは、エクセルのような表(グリッド・コントロール)の書き換え時の描画を速くするため、一時的に表示の更新を止めて(ScreeUpdating=false) 、それから表を書き換えて、その後ふたたび表示を更新する(ScreeUpdating=true)ために使うものです。 そうしないと、1つのセルを書きかえるたびに表全体を再描画するため、たいへん表示が遅くなります。 (リンク先に書いてあること) しかし、IEのバージョンが3.0,3.01では、再表示がうまくできないことがあるので、下の方にある、方法1または、方法2で回避できる。 とのことですが、IEのバージョンが(たぶん)違うので、うまくいくかどうか。。。

sekkii
質問者

お礼

早速のご回答ありがとうございます! ScreenUpdating はなるべく使いたいので 方法2を試してみようかと思ったのですが まだ試せてないです。 方法2は Set xRange = Selection  'Set a variable to the active selection. Range("IV65536").Select 'Select another cell in the sheet. xRange.Select       'Select the original range. を、EndSubの直前に記述するみたいですが、 コメントになっている部分はどういう意味なのか,このコードが何をする命令なのかが不明です。 「終盤」と書いた通り、ScreeUpdating=false では現象は起きず、たぶん=trueで何かが起きてるんでしょうね…。 まだなんとなく、喉につっかえた感じです。

sekkii
質問者

補足

何度もすみません! IEのバージョンは「7」でした。 そのパソコンの隣のパソコンもOS、IE、Excel共にバージョンは同じでしたが 隣のパソコンでは普通に実行できます。 何か設定の違いでしょうか? このマクロはいろんなパソコンから使うので 「方法2」が怖くてできないところです。 変なことにはならないでしょうが、やはり意味のわからないコードは怖いですね…。 というわけで、最初の質問とは違いますが、この現象の解決策がありましたら教えてください!

関連するQ&A