2012-10-02 18 views
5
Set mainWB = Workbooks("Copy Paste.xlsb") 
Set mainWS = mainWB.Sheets("Sheet1") 
Set testWS = mainWB.Sheets("Sheet3") 

mainWS.Select 

私はエクセルVBAでの最後の行にエラーを取得しておいてください。オブジェクト '_Worksheet'のメソッド選択が失敗しました - なぜですか?

任意のアイデアなぜか、どのようにこの問題を解決するために

の「オブジェクトのメソッドを選択し 『_Worksheet』は失敗しましたか」?ありがとうございました!

+0

に設定されている場合、削除機能が動作しないことに注意することも重要であるが、実際にシート1 /シート3という名前のシートはありますか?ワークブックの名前は同じですか? – enderland

+1

'mainWB'はアクティブですか? –

+2

したがって、 '.Select'は避けなければなりません:)このリンクを参照してくださいhttp://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select –

答えて

6

コメントで説明したように、VBA内のSheetsがアクティブでない(またはRangeのオブジェクトが)選択できません。

たとえば、次のコード

Sheets(1).Activate 
Sheets(2).Range("A1").Select 

は、あなたが受けているエラーが発生します。あなたのケースでは

は、あなたがSelectアクティブでないシートにしようとしているようだ - あなたのmainWSオブジェクトは、おそらくあなたは、このコードを呼び出している時点でActiveSheetではありません。あなたがプロパティまたは任意の他の操作を取得するためのいずれかのコマンドActiveSheetで活性化ワークシートを参照することができます

if (ActiveSheet.Name <> mainWS.Name) then 
    msgbox ("Going to crash after clicking ok!") 
end if 
mainWS.Select 

注:あなたのコードの末尾に次の行を追加した場合、これが起こっているかどうかをテストするための簡単な方法ですあなたはやっていることに興味があります。

このエラーは、ブック内のすべてのワークシートでループ処理が行われていて、隠れシートがある場合にも発生する可能性があります。それを見てください。


最終、そしてあなたの特定のエラーメッセージとは無関係の、私はあなたがどこかと単純にその変数を宣言していると仮定すると、それらをここにコピーされませんでした - あなたは、多くの場合、問題のすべての種類に実行することができますように私はOption Explicitを使用して検討するとされていない場合あなたのVBAコードの先頭にOption Explicitがなくても。

+0

優れた答え。知識とプレゼンテーションをお祝いします。 – NoChance

+0

@NoChance種類の言葉をありがとう。 – enderland

1

私は上記に同意しながらワークシートの可視性が現在xlSheetVeryHidden