次の方法で共有

EXCEL2007で作成したマクロがEXCEL2019で動きません

Anonymous
2020-03-04T03:00:06+00:00

EXCEL2007で作成したマクロがEXCEL2019で動きません

With Sheets("???")

.Range("b68").End(xlUp).Select

.Range(ActiveCell, Range("b9")).Copy Destination:=Sheets("***").Range("a4")

End With

以下コードは続きますが、上述の.Range("b68").End(xlUp).Selectで毎回引っかかり、

実行時エラー1004

rangeクラスのselectメソッドが失敗しました

と出ます。

正確にはこのエラーで止まる場合と、最後まで実行できる場合があります(何度かやってみましたが実行し成功の次は失敗→デバックでコードに飛び中断後、再実行すると成功といった風に1回ごとに成功と失敗が発生します)これに対し2007で動かした場合は何度実行してもエラーにはなりません。

さらに、実行できた場合も2007では1秒で済む処理が2019だと3秒ほどかかります。

EXCEL2007はもうサポートも終了していることから2019を試験購入し(会社なのでまず1台)テストしましたがこれでは使い物になりません。

因みにマクロに実行はシート上に配置したボタンクリックで実行。

昨日PC(windows10w 64bit)を閉じる際にosが自動でアップデートされています。それが影響しているかどうかはわかりませんが。

よろしくお願いします

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

  1. Anonymous
    2020-03-04T07:54:15+00:00

    > With Sheets("???")

    > .Range("b68").End(xlUp).Select

    > 上述の.Range("b68").End(xlUp).Selectで毎回引っかかり、

    > 実行時エラー1004

    > rangeクラスのselectメソッドが失敗しました

    > と出ます。

    "???" という名前のワークシートがその時点でアクティブになっていないからでは。

    2 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません

4 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2020-03-04T08:56:53+00:00

    > ただクリックするマクロボタンは該当シート上にあるんですが…

    クリックした瞬間はアクティブでも、もしマクロの実行過程において

    他のワークシートをアクティブにしている(そういう動作を伴う

    コードが、件のステートメントより前に記述されている)のであれば、

    同様の結果になってもおかしくはありません。

    仮に B68 セルが空白セルだとすると、そのコードにおいて実現しようとしているのは

    「B9 セルから『 B68 セルより上の行に存在するセル領域の最終行のセル』までの

    セル範囲をコピーし、"***" というワークシートの A4 セルに貼り付ける」という

    操作でしょうから、そもそも Select メソッドを使用する必要はないでしょう。


    With Worksheets("???")

        .Range(.Range("b9"),.Range("b68").End(xlUp)).Copy Destination:=Worksheets("***").Range("a4")

    End With


    > 2007ではこれで問題なくそのシートだと認識していたのですが、

    > 2019になるとダメみたいですね。

    仮にバージョンの問題だとするなら、恐らく Excel 2013 以降から

    MDI ではなく SDI が採用された結果だと思われます。

    いずれにせよ、単にセル範囲を参照したり、セル同士で値のやり取りをしたりするだけなら、

    「シートやセル範囲の選択」(を実行するコード)は不要です。

    0 件のコメント コメントはありません
  2. Anonymous
    2020-03-04T08:17:56+00:00

    一つ前の私の返信の最後に書かせていただいたように、該当シートをselectの一文をwith句の前に入れることで解決しています。

    ご指摘の通りですね。ありがとうございます。

    ただクリックするマクロボタンは該当シート上にあるんですが…

    2007ではこれで問題なくそのシートだと認識していたのですが、2019になるとダメみたいですね。むしろ退化しているのでしょうか。まあ解決の糸口はつかめたような気がするので他のマクロでも同様の事例が発生した際にはまず確認してみるようにします。

    返信いただいた方々ありがとうございました。

    0 件のコメント コメントはありません
  3. Anonymous
    2020-03-04T04:37:39+00:00

    こんにちは。

    officeのバージョンを隔てると仕様も変わるので、こうした不具合は不可避です。

    古い環境のまま使用するか、マクロを修正するかの2択になります。

    マクロを修正する場合は、VBA専用フォーラムがございますので、ご参考ください。

    https://social.msdn.microsoft.com/Forums/ja-JP/...

    ご返信いただきありがとうございます

    ご紹介いただいたVBA専用フォーラムで探してみましたが、同じ状況の投稿は見つけられず解決には至りませんでした。

    「officeのバージョンを隔てると仕様も変わるので、こうした不具合は不可避」とのことですが、そもそもこのこと自体が問題だと思いますが…バージョンアップするならちゃんと整合性をとった開発をしてほしいものです。

    過去にOSがXPから7に切り替わった際もEXCELからACCESSの情報を呼び出すマクロが動かなくなるトラブルが発生し、コードを修正したことがあります。(だからOSやOFFICEの更新をしたくない)

    今回は、単純なマクロ(with句でシートのセルを指定程度)でこんな不整合が生じているようでは、先が思いやられるというのが実感です。

    マクロで開発したコードは多数あるため、今のままでは古い環境のままいくしかないようですね。

    ありがとうございました。


    最終的に自力解決しました。

    with句の前で、Sheets("???").selectで強制的に認識?させるとうまくいきました。

    ありがとうございました。

    0 件のコメント コメントはありません
  4. Anonymous
    2020-03-04T03:08:23+00:00

    こんにちは。
    officeのバージョンを隔てると仕様も変わるので、こうした不具合は不可避です。
    古い環境のまま使用するか、マクロを修正するかの2択になります。
    マクロを修正する場合は、VBA専用フォーラムがございますので、ご参考ください。
    https://social.msdn.microsoft.com/Forums/ja-JP/...

    0 件のコメント コメントはありません