[[20130121130804]] 『Excel2010のマクロについての質問です。  ページの最後に飛ぶ

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

 

『Excel2010のマクロについての質問です。
「マクロ処理1」と「マクロ処理2」を
分けて、マクロを実行しています。
(仕様変更等の都合ですので、すみませんが
 詳細はMSサポート等を参考にして下さい。)
このマクロ処理を、継続して実施したいのですが、
マクロ環境を、リセットかリセットに近い環境に戻す様な、
マクロ文は、無いでしょうか。
WEBで可也探しましたが、見つかりませんでした。
もし、ご存知の方、居られましたら、教えて下さい。
宜しく、お願いします。』(八方塞がり)

 質問の内容が良く分からないのですが、「マクロ環境をリセット」はどのような
 ことを指しているのでしょうか。
 () 内のMSサポート云々も何のために書かれたか良く分かりませんが、質問が単に
 二つのマクロを同時に実行したいということであれば、

 Sub 一緒に実行()
    マクロ処理1
    マクロ処理2
 End Sub
 としてこれを実行するのではダメなのでしょうか。
 (Mook)

 衝突、かつ、ほとんどMookさんのコメントと変わらないけど以下。

 ちょっと文章の意味が・・・・理解力がどんどんおちているので。

 >仕様変更等の都合ですので、すみませんが詳細はMSサポート等を参考にして下さい

 MSサポートといっても膨大な事象の記事があるので、その中の何を参照したらいいのか???
 仕様変更の都合といわれても、その仕様変更が何なのかわからないし、仕様変更の都合だからMSサポートを参考にしなきゃいけない理由も??)

 >マクロ環境を、リセットかリセットに近い環境に戻す様な、マクロ文は、無いでしょうか

 これも、意味がよくわからないねぇ。マクロ環境をリセット?
 使っている変数なんかを初期値に戻すということ?
 それは、そのようなコードを(必要なら)書いておけばいいだけのことなんだけど?

 2つのマクロを連続して実行するなら

 SUb 連続実行()
   マクロ処理1
  マクロ処理2
 End Sub

 こうしたらいいし・・・・

 これらのプロシジャの中で使っている変数の値に関することなら、やはりコードをアップしてもらわないと
 一般論ではなかなか。。。。

 (ぶらっと)

Excel2007のマクロをExcel2010で実行しようとした場合、
ファイル数が多い場合等、途中で停止する事があります。
只これは、仕様変更による事は分っています。
マクロ処理は、元々は1つでしたが、途中で止まってしまいますので、
マクロ処理1とマクロ処理2に分割して実行しています。
説明がし難いのですが、これを回避する為に、マクロ処理途中で
マクロ文にて、マクロ開始環境に近い状態にする事は出来ないものかと思い、
もし、その様なマクロ文がもし有ればと思い質問させて頂きました。
この現象は、一部の人は理解されていると思いますが、
個人レベルの利用方法では、多分現れないかと思います。
初期値等のリセット等、どんな事でも、参考に成る事が有りましたら、
教えて下さい。
質問が判り難く、すみません。(八方塞がり)


 >この現象は、一部の人は理解されていると思いますが、 

 一部以外の私なので理解力がとぼしくて・・・

 バージョンがかわって、いろんな予期せぬ障害がでるってのは、よくある話だけど
 様々な事象があるので、せめて、MSのページの該当のURLをはってくれれば、あぁ、この障害かと
 わかるかもしれない。

 それより、コードをアップすれば、いろんんあアドバイスが寄せられると思うけど・・・
 こーーどをアップできない理由があるのかなぁ・・

 スタックがオーバーフローとか、そんなこと?

 (ぶらっと)

 衝突、かつ、ぶらっとさんとかぶりましたが一応アップですw。

 EXCEL の仕様によってマクロの処理をあわせなければならないケースは多々ある
 と思いますが、もう少し客観的に分かるように説明いただけないでしょうか。
 ・何の処理をしているか
 ・仕様変更といっているのは何か(MS に説明があるのならそのリンク先)
 ・マクロ開始環境 といっているのは何のことか

 もし、マクロの環境といっているのが、ヒープやスタックなどを指している
 のであれば、そのように説明していただかないとなかなか伝わりません。
 まっさらにするなら EXCEL を再起動するのが手っ取り早いと思いますが、
 ブックの再読み込みでよいのか、マクロの再実行でよいのか、処理により対応は異なる
 と思います。

 制限を回避する実装方法の改善を検討するのが一番スマートだと思いますが、
 これに関しては「何をしている」かの説明がないと回答ができません。
 (Mook)


 とりあえず再起動をする一例です。
 管理用シートの A1 をカウントに使い、5回繰り返し再起動しながら処理をします。
 (Mook)

 Sub ResetExcel()
     Application.Visible = True
     連続実行
     With WorkSheets("管理用").Range("A1")
        If .Value < 5 Then
            .Value = .Value + 1
            Application.OnTime Now + TimeValue("00:00:10"), "ResetExcel"
        End If
        ThisWorkbook.Save
        Application.Quit
     End With
 End Sub

色々、回答有り難う御座います。
説明し難いので、関連HPが見つかりましたので記載します。
http://takiza.blog39.fc2.com/blog-entry-92.html
http://support.microsoft.com/kb/2484082/ja
解決策は記載されていますが、一時的な物となっており、
MSでも、解決方法が度々、変わります。
これに代わる、マクロ文が無いかと探しています。
例えば、マクロの処理プロセスを、
途中で「処理待ち」出来る様な、マクロ文がもし有れば、
打開出来るのではないかと思います。
(但し、タイマ等は効果有りません。)


 バージョンがアップしたときに従来の機能で不具合が出る、それをそのままにしている
 MSにも困ったもんだけど、天下のMSなので、すぐに改善はしてくれないんだろうね。

http://support.microsoft.com/kb/2484082/ja

 ここで対処法として掲載されていた、4つの方法のうち、1番目は、PC全体に影響
 しそうだし、4.のためにわざわざ別アプリを立ち上げて・・というのもいかがかと思うけど
 けど、少なくとも 2.と3.ならコードをちょこっと追加するだけでいけるよね。
 試す価値ありと思うけど、それをやっても だめだったということ? 

 (ぶらっと)

 Win98のとき、同じような現象での質問をみたことがありました。

  Sub test1()
    Dim bk As Workbook
    Do
       Set bk = Workbooks.Open(ThisWorkbook.Path & "\book1.xls")
       With bk.Worksheets("sheet1").Range("a1")
          .Value = .Value + 1
       End With
       bk.Close True
    Loop
 End Sub

 このループでリソース不足になる現象でした。
 FCB領域を開放してない(ガベージコレクションがなされていない)のだろうと

 Sub test1()
    Dim bk As Workbook
    Do
       Set bk = Workbooks.Open(ThisWorkbook.Path & "\book1.xls")
       With bk.Worksheets("sheet1").Range("a1")
          .Value = .Value + 1
       End With
       bk.Close True
       doevents  '←の挿入    
    Loop
 End Sub

 これで改善されたことを記憶しています。
 この当時、何気にループにDoevents入れているのは、見かけましたよ!!

 これでも不満なら、既に投稿されている ontimeメソッドを工夫されてみては いかがですか?

 ichinose


コメント返信:

[ 一覧(最新更新順) ]


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