重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

VBA初心者です。
設定、部品1、部品2、部品3、部品4と4つのシートがあります。
設定シートにオールクリアボタンを設置し各シートの値だけをクリアする
ようにしたいのですが、「subまたはfunctionが定義されていません」という
エラーが出てしまいます。

間違ってる箇所とうまくいく方法を教えていただけませんでしょうか?

記述は以下のとうりです。

ちなみにエクセルを開くと全シート保護という設定にしているので
まずその解除をしてオールクリアしてまた保護といううふうにしたいです。

Private Sub CommandButton1_Click()

'全シート保護解除
Dim sh As Worksheet
For Each sh In Worksheets
sh.Unprotect
Next sh

'範囲選択
With Worksheet("部品1").Select
Cells.Select

'シートの値だけをクリアする
Selection.SpecialCells(xlConstants, 23).ClearContents
End With

'範囲選択
With Worksheet("部品2").Select
Cells.Select

'シートの値だけをクリアする
Selection.SpecialCells(xlConstants, 23).ClearContents
End With

'範囲選択
With Worksheet("部品3").Select
Cells.Select

'シートの値だけをクリアする
Selection.SpecialCells(xlConstants, 23).ClearContents
End With

'範囲選択
With Worksheet("部品4").Select
Cells.Select

'シートの値だけをクリアする
Selection.SpecialCells(xlConstants, 23).ClearContents
End With

'全シート保護

For Each sh In Worksheets
sh.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Next sh

End Sub

以上です、よろしくお願いします。

A 回答 (2件)

subまたはfunctionが定義されていません



というエラーに関しては

Worksheet("部品1")

ではなく

Worksheets("部品1")

です

----------
Withをあえてつかえば

'範囲選択
With Worksheets("部品1")
.Select
.Cells.Select

'シートの値だけをクリアする
Cells.SpecialCells(xlConstants, 23).ClearContents
End With

ですが、結局下記のように書けます。

Worksheets("部品1").Cells.SpecialCells(xlConstants, 23).ClearContents

で、すべてのシートをまとめるとNo.1さんのように書けます。
    • good
    • 0
この回答へのお礼

すごくわかりやすいです。
丁寧に教えて頂きありがとうございます。

お礼日時:2012/07/19 12:54

cell やrangeの前にシートが指定されていないと


思惑と違うシートやセルが対象になって、なぜそうなるのか理解できなくなります。
必ずシートまで指定するようにしましょう。
もちろんWith句を使って簡略化すればいいのですが、With句の使い方も慣れが必要です。

ご提示の部分だけなら以下で終わりです。

Private Sub CommandButton1_Click()
Dim sh As Worksheet

For Each sh In Worksheets
sh.Unprotect
sh.Cells.SpecialCells(xlConstants, 23).ClearContents
sh.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Next sh
End Sub
    • good
    • 0
この回答へのお礼

なるほど、上手くできました。
ありがとうございます。

お礼日時:2012/07/19 12:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!