C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

RangeクラスのSelectメソッドが失敗しましたの対応

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■82968 / inTopicNo.1)  RangeクラスのSelectメソッドが失敗しましたの対応
  
□投稿者/ まー (1回)-(2017/02/23(Thu) 10:20:40)

分類:[VB.NET/VB2005 以降] 

パソコンの入れ替えの為、
既存システムを新システムに移行するため、動作検証を行っているのですが、
下記のコードの3行目で、エラーが発生してしまいます。
設定に問題があるのか、、
コードの書き方を変更する必要があるのかが、判断できず困っております。
なお、既存システムのdll等は新パソコンにすべて移行してあります。
ご教示頂けたら幸いです。どうぞよろしくお願いいたします。


<コード>
xlSheet_n.Activate()
xlSheet_n.Rows("6:35").copy()
xlSheet_n.Rows("36:65").select()
xlSheet_n.Paste()


<エラー文>
COMExceptionはハンドルされませんでした。
型'System.Runtime.InteropServices.COMException'のハンドルされていない例外が
Microsoft.VisualBasic.dllで発生しました。

追加情報:RangeクラスのSelectメソッドが失敗しました。





【旧環境】
Win7 32bit
Excel2013
visual studio2010


【新環境】
Win10 32bit
Excel2016
visual studio2015
引用返信 編集キー/
■82969 / inTopicNo.2)  Re[1]: RangeクラスのSelectメソッドが失敗しましたの対応
□投稿者/ 魔界の仮面弁士 (1147回)-(2017/02/23(Thu) 11:23:25)
No82968 (まー さん) に返信
> xlSheet_n.Activate()
> xlSheet_n.Rows("6:35").copy()
> xlSheet_n.Rows("36:65").select()
> xlSheet_n.Paste()

Excel の COM 連携としては、あまり望ましくないコーディングパターンに
見えますが、それはとりあえず置いといて…。


> 追加情報:RangeクラスのSelectメソッドが失敗しました。

可能性1:該当行が EnableSelection で選択拒否されている
可能性2:Excel がユーザー応答中で操作を受け付けない状態になっている
可能性3:xlSheet_n.Visible が xlSheet(Very)Hidden 状態のため、
 Acivate メソッドが無視されており、Select が拒否されている
引用返信 編集キー/
■82971 / inTopicNo.3)  Re[1]: RangeクラスのSelectメソッドが失敗しましたの対応
□投稿者/ PANG2 (159回)-(2017/02/23(Thu) 14:49:54)
2017/02/23(Thu) 14:56:27 編集(投稿者)

No82968 (まー さん) に返信
> <コード>
> xlSheet_n.Activate()
> xlSheet_n.Rows("6:35").copy()
> xlSheet_n.Rows("36:65").select()
> xlSheet_n.Paste()
>

エラーになる原因は分かりませんが、良いコードとは言えませんね。

Selectしない、クリップボードを経由しない方法もあります。

VBA高速化テクニック
http://officetanaka.net/excel/vba/speed/s2.htm




引用返信 編集キー/
■82973 / inTopicNo.4)  Re[1]: RangeクラスのSelectメソッドが失敗しましたの対応
□投稿者/ 大谷刑部 (13回)-(2017/02/23(Thu) 16:07:36)
No82968 (まー さん) に返信
> <コード>
> xlSheet_n.Activate()
> xlSheet_n.Rows("6:35").copy()
> xlSheet_n.Rows("36:65").select()
> xlSheet_n.Paste()
>
>
> <エラー文>
> COMExceptionはハンドルされませんでした。
> 型'System.Runtime.InteropServices.COMException'のハンドルされていない例外が
> Microsoft.VisualBasic.dllで発生しました。
>
> 追加情報:RangeクラスのSelectメソッドが失敗しました。
>

構文的なミスはないので、
.select()の際に、前の処理が終わってなくて不整合が起こっている系では?

新環境も32bitというのが若干気になるので、
タスクマネージャー等で、CPUとメモリの負荷を見てみては?
まずはボトルネックの原因を追求した方がいいと思います。

Excel2016はどうなっているか知りませんが、
Excelは2007で行数の限界値等の仕様が大幅に変わったとき、
64bit版は端末の目盛をフルに使えるのに対し、
32bit版は固定値で2003の2倍に増えただけなので、
32bit版ではメモリ不足関連のエラーが頻発したりしてます。

Excel2016ではこの辺りは改善されているかもしれませんが、
一応確認してみてもいいかと思います。

対処方法はほかの方が指摘しているように、
Activateをしないとか
selectを単一行選択にしてpasteするとかが
現実的な気はします。


引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ