こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

セルの値を削除するVBA

Excel2003を使い、名簿リストのようなものを作成しました。
ワンクリックで一部情報をすべて削除できるように、ボタンに対してマクロを組んだのですか、
なぜか、
実行時エラー'1004'
RangeクラスのSelectメゾットが失敗しましたと表示されます。
ボタン処理のソースはこれです↓
Private Sub CommandButton1_Click()

メッセージ = "本当に削除しますか"
スタイル = vbYesNo
タイトル = "一部削除"
YESNO = MsgBox(メッセージ, スタイル, タイトル)
If YESNO = vbYes Then
  Sheets("リスト").Select
Range("C2:E101").Select
Selection.ClearContents
Sheets("設定").Select
ActiveWindow.SmallScroll Down:=39
Range("B57:H57").Select
  完了 = "削除しました"
スタイル = vbOKOnly
dds = MsgBox(完了, スタイル, タイトル)
Else
End If

End Sub
これを↑どういった風に改変すればエラーがでなくなるのか?ご存じの方教えてください。
よろしくお願いします。

投稿日時 - 2008-09-09 19:24:13

QNo.4316385

すぐに回答ほしいです

質問者が選んだベストアンサー

オートフィルターやセルの結合など、リストシートの状態に問題が有るのかと
考えていましたが・・・

>設定には、各種ボタン(マクロ実行用)は配置されています。
この情報でやっと再現する事が出来ました。

>Private Sub CommandButton1_Click()
との事ですので、設定シートに設置しているコマンドボタンより
マクロを実行していますよね?

バグなのかは、私もよくわかりませんが、コマンドボタンが設置されている
シートとは別のシートのセルをSelectしようとするとエラーが発生します。


>Sheets("リスト1年").Select
>Range("C2:E101").Select

この二行を

Sheets("リスト1年").Activate
ActiveSheet.Range("C2:E101").Select

とすれば解決すると思います。

投稿日時 - 2008-09-11 22:13:44

お礼

ありがとうございます。無事解決しました。最後までご丁寧にありがとうございました。

投稿日時 - 2008-09-12 22:59:09

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

>なぜかデバッグボタンはあるのですが、クリックできず灰色です。
プロジェクトに保護かけていませんか?


>Sheets("リスト").Select
>Range("C2:E101").Select
>Selection.ClearContents

これから推測すると・・・
削除しようとしてるセルは、リストシートのC2:E101のセル

>削除しようとしているセルは、=(リスト!D2)
この式から推測すると・・・
リストシート以外のシートのセルを削除しようとしている。

と、捉えてしまうのですが・・・?
削除したいセルは、どのシートなんでしょうか?


>削除しようとしているセルに、フィルタ処理のような機能
オートフィルターかな?


とりあえず色々試してみたのですが、エラー吐き出さないんですよね、、、
デバッグ結果お待ちしております;

投稿日時 - 2008-09-10 23:21:52

お礼

ご回答ありがとうございます。
たしかにプロジェクトにロックがかけたままでした。解除したところ無事デバッグできました。
使ってる機能はオートフィルターで間違いないです。
作成したファイルは、全部で三つのシートにより構成されており、
設定、リスト、印刷でわかれています。
設定には、各種ボタン(マクロ実行用)は配置されています。
リストには実際に名前や電話番号、住所など、個人情報が記載されています。
このシートにはオートフィルター機能がかけられており、情報によって絞り込めるようになっています。
そして印刷は、印刷用に多少リスト(シート)に比べて印刷に向いたシートになっており、
=(リスト!D2)といった感じでリスト側から参照しています。
デバッグ結果です。⇒をかいたところでエラーがでてるみたいです。

Private Sub CommandButton1_Click()
メッセージ = "本当に削除しますか"
スタイル = vbYesNo
タイトル = "一部削除(一学年)"
YESNO = MsgBox(メッセージ, スタイル, タイトル)
If YESNO = vbYes Then
Sheets("リスト1年").Select
⇒Range("C2:E101").Select
Selection.ClearContents
Sheets("設定").Select
ActiveWindow.SmallScroll Down:=39
Range("B57:H57").Select
完了 = "削除しました"
スタイル = vbOKOnly
dds = MsgBox(完了, スタイル, タイトル)
Else
End If
End Sub

親切にご回答いただきありがとうございます。助かります。

投稿日時 - 2008-09-11 19:12:09

ANo.1

んー テストしてみたのですが、スムーズに処理が終わってしまいました。

Private Sub CommandButton1_Click()
メッセージ = "本当に削除しますか"
スタイル = vbYesNo
タイトル = "一部削除"
YESNO = MsgBox(メッセージ, スタイル, タイトル)

If YESNO = vbYes Then
Sheets("リスト").Range("C2:E101").ClearContents
完了 = "削除しました"
スタイル = vbOKOnly
dds = MsgBox(完了, スタイル, タイトル)
Else
End If
End Sub

上記のように記述するとエラーは発生しないと思いますが、
本当の意味での解決では無いですよね。


ということで、デバッグという機能の説明をさせていただきます。
>実行時エラー'1004'
>RangeクラスのSelectメゾットが失敗しました。
とのメッセージ窓にデバッグというボタンがありますよね?
それを押すとデバッグ画面に切り替わり、
問題が発生した行(処理が止まってしまった行)が黄色くなっていると思います。

これを辿っていけば問題解決が容易に行えます。
マクロの記述ではなく、シートの内容に問題点があるのかと思いますが・・・。

一度デバッグを行ってみてください。

投稿日時 - 2008-09-09 20:20:24

お礼

ご回答ありがとうございます。
なぜかデバッグボタンはあるのですが、クリックできず灰色です。
どうしたらいいんですかね?それと補足として、たしかに新規にシートを作成して、マクロを張りつけましたができました。
それと削除しようとしているセルに、フィルタ処理のような機能(項目の横にあるボタンを押すと絞り込みができるやつです)
を付加しています。それと削除しようとしているセルは、=(リスト!D2)という形で
他のセルから参照しています。この二つが原因ってことはあるのでしょうか?
自分でも試してみていますが、VBAに関してまったく素人なのでわからないことだらけです。
よろしくお願いします。

投稿日時 - 2008-09-09 22:55:31

あなたにオススメの質問