Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2013)
書式コピー貼り付けで春つけ先の選択解除について
投稿日時: 18/02/13 15:33:44
投稿者: MM522

組織で多くの人が使うファイルはいつのまにか書式が乱れます。
そのためOPEN時に自動的に元の正しい書式に戻すため、テンプレートの書式を
書式貼り付けするようにしていますが、下記のようなコードで貼り付け先の選択状態を
解除しようとして入れたSelect文のところで「RangeクラスのSELECTに失敗・・」
というエラーメッセージが出ます。
これを外すと書式コピー自体は正常に動作終了しますが、貼り付け先が選択状態のままです。
何が悪いのか? 別の方法はあるのか?
教えていただけると嬉しいです。よろしくお願い致します。
 
For Each shtA In ThisWorkbook.Worksheets
    :
    :
   Sheets("Tmplt").Range("A1:M100").Copy
   shtA.Range("A1").PasteSpecial (xlPasteFormats)
   Application.CutCopyMode = False
   shtA.cells(1,1).select ---->ここでひっかかる
Next

回答
投稿日時: 18/02/13 16:06:58
投稿者: Suzu

こんにちは。
 
Rangeオブジェクトに対し、Select または Activeメソッドを発行する為には
そのRangeオブジェクトの所属する WorkSheetがアクティブになっている必要があります。
 
shtA.cells(1,1).select
の段階で、shtA がアクティブになっていませんよね。
ワークシートをアクティブにしてから Selectしましょう。

回答
投稿日時: 18/02/13 16:15:52
投稿者: mattuwan44

>別の方法はあるのか?
 
Application.Goto shtA.cells(1)
 
としてもいいかもです。

回答
投稿日時: 18/02/13 17:41:49
投稿者: WinArrow
投稿者のウェブサイトに移動

テンプレートがブックの場合
 
For〜Nextの前に開きましょう。
その後、自ブックをActivate
 
※For〜Nextの中では、開かないようにしましょう。
 
そして、複写元のシートはSELECTしないことです。
 
テンプレ^−トが、シートの場合
複写元のシートはをSELECTしなくても処理可能です。
 
できれば、SELECTしない方法をお勧めします。
 

投稿日時: 18/02/13 23:39:34
投稿者: MM522

早速のご回答ありがとうございました。
そうか、シートがActiveでないとSelectできないんですね?
 
私も普段Selectとかはあまり使わないようにしていますが、この場合はシートを
ActivateしておかないとSelectできないんですね。
ありがとうございました。
 
Application.GoTo shtA.cells(1)
これは知りませんでした。
勉強になりました。