Microsoft 製品に組み込まれている Visual Basic の実装。
> With Sheets("???")
> .Range("b68").End(xlUp).Select
> 上述の.Range("b68").End(xlUp).Selectで毎回引っかかり、
> 実行時エラー1004
> rangeクラスのselectメソッドが失敗しました
> と出ます。
"???" という名前のワークシートがその時点でアクティブになっていないからでは。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
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が自動でアップデートされています。それが影響しているかどうかはわかりませんが。
よろしくお願いします
Microsoft 製品に組み込まれている Visual Basic の実装。
ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。
質問作成者が受け入れた回答
> With Sheets("???")
> .Range("b68").End(xlUp).Select
> 上述の.Range("b68").End(xlUp).Selectで毎回引っかかり、
> 実行時エラー1004
> rangeクラスのselectメソッドが失敗しました
> と出ます。
"???" という名前のワークシートがその時点でアクティブになっていないからでは。
> ただクリックするマクロボタンは該当シート上にあるんですが…
クリックした瞬間はアクティブでも、もしマクロの実行過程において
他のワークシートをアクティブにしている(そういう動作を伴う
コードが、件のステートメントより前に記述されている)のであれば、
同様の結果になってもおかしくはありません。
仮に 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 が採用された結果だと思われます。
いずれにせよ、単にセル範囲を参照したり、セル同士で値のやり取りをしたりするだけなら、
「シートやセル範囲の選択」(を実行するコード)は不要です。
一つ前の私の返信の最後に書かせていただいたように、該当シートをselectの一文をwith句の前に入れることで解決しています。
ご指摘の通りですね。ありがとうございます。
ただクリックするマクロボタンは該当シート上にあるんですが…
2007ではこれで問題なくそのシートだと認識していたのですが、2019になるとダメみたいですね。むしろ退化しているのでしょうか。まあ解決の糸口はつかめたような気がするので他のマクロでも同様の事例が発生した際にはまず確認してみるようにします。
返信いただいた方々ありがとうございました。
こんにちは。
officeのバージョンを隔てると仕様も変わるので、こうした不具合は不可避です。
古い環境のまま使用するか、マクロを修正するかの2択になります。
マクロを修正する場合は、VBA専用フォーラムがございますので、ご参考ください。
ご返信いただきありがとうございます
ご紹介いただいたVBA専用フォーラムで探してみましたが、同じ状況の投稿は見つけられず解決には至りませんでした。
「officeのバージョンを隔てると仕様も変わるので、こうした不具合は不可避」とのことですが、そもそもこのこと自体が問題だと思いますが…バージョンアップするならちゃんと整合性をとった開発をしてほしいものです。
過去にOSがXPから7に切り替わった際もEXCELからACCESSの情報を呼び出すマクロが動かなくなるトラブルが発生し、コードを修正したことがあります。(だからOSやOFFICEの更新をしたくない)
今回は、単純なマクロ(with句でシートのセルを指定程度)でこんな不整合が生じているようでは、先が思いやられるというのが実感です。
マクロで開発したコードは多数あるため、今のままでは古い環境のままいくしかないようですね。
ありがとうございました。
最終的に自力解決しました。
with句の前で、Sheets("???").selectで強制的に認識?させるとうまくいきました。
ありがとうございました。
こんにちは。
officeのバージョンを隔てると仕様も変わるので、こうした不具合は不可避です。
古い環境のまま使用するか、マクロを修正するかの2択になります。
マクロを修正する場合は、VBA専用フォーラムがございますので、ご参考ください。
https://social.msdn.microsoft.com/Forums/ja-JP/...