2017-11-24 4 views
0

Excelのワークシートをコピーして、コマンドボタンでエクスポートし、次のコード(関連コードが削除されていない) :Excel 2010:コピーされたシートのみのボタンを削除する

Application.ScreenUpdating = False 
N = Sheets.Count 
Sheets("XYZ").Copy After:=Sheets(N) 
''''' Sheets("XYZ").Select ''''' leads to an error - see below 
Sheets(N + 1).Unprotect 
Sheets(N + 1).Shapes.Range(Array("Button 1")).Delete 
Application.CutCopyMode = False 
Sheets(N + 1).Move  ' creates and activates a new workbook 
Application.ScreenUpdating = True 

問題は、テンプレートがボタンでシート「XYZ」に戻ってしまうことです。しかし、私が試したもの(DoEventsとエラートラップを包括!)は、Excelは常にプロテクトされたテンプレートの同じボタンを削除しようとします。エラーにつながります( "コマンドは保護されたシートで使用できません...")。

テンプレートの他のシートが選択されている場合、バグは表示されません。 注:テンプレートには隠れたシートがあることがあるため、コピーしたシートを最後に追加する方が簡単です。したがって、コピーしたシートを移動するときに最後のシートに戻ります。

エラーを生成せずに、希望のマクロボタンのシート「XYZ」に戻るための回避策がありますか?

答えて

0

ブック「XYZ」が保護されており、これがバグの本当の原因です。

ご提案をありがとう、私は大きな違いが表示されていない、と多少隠されたものの、実際にエラーがまだここにある:サブ終了後、焦点はシートを新規ブックにある「XYZ(2 ) "すべてが正常に見えます。

これは明らかに、新しいブックを閉じて、最後のシートにフォーカスを合わせてテンプレート(またはマクロ付きブック)に戻る場合です。 ただし、テンプレートのブックシート「XYZ」が選択されると、エラーメッセージが表示されます。

私は今、サブで詳細に段階的に、より見てきた:シェイプは.Deleteコマンドは、シート「XYZ」との両方に同時にボタンを削除するには、計画「XYZ(2)」明らかに... - 幸いのみ削除されますシート「XYZ(2)」の正しいボタン!本当に最後のシートとしてのシートをコピーするには :

Private Sub Test() 
    Dim N As Long 
    N = Sheets.Count 
    Sheets("XYZ").Copy After:=Sheets(N) 
    Sheets("XYZ").Select 
    With Sheets(N + 1) 
     .Unprotect 
     Sheets("XYZ").Unprotect ' avoids the erroneous error message 
     .Shapes.Range(Array("Button 1")).Delete ' Sheets(N+1) = "XYZ (2)" 
     Sheets("XYZ").Protect _ 
      DrawingObjects:=True, Contents:=True, Scenarios:=True 
     .Move 
    End With 
End Sub 

追加コメント: したがって、問題の回避策は驚くほどが一時的に何もしないすべきでシート(深い思考、完全に狂っを)保護解除が必要ですここで望まれているように、隠されていれば、前の最後のシートのプロパティを可視に一時的に変更する必要があります。それ以外の場合、Excelは.Copy Before:=の代わりに.Copy After:= ... そして、Sheets(N + 1)は間違った非表示の1つを指します。もちろん、移動しないでボタンを削除する必要はありません!

関連する問題