教えて! goo のコンテンツに対する取り組みについて

こんにちは。
エクセル2002を使用しています。
VBAで、開始行を入力させ開始行+38行を削除するような
マクロを作りました。

Sub 削除()
Dim Sline As Integer, Eline As Integer
Dim S As String
'開始行の入力
Sline = Application.InputBox(prompt:="削除開始  行を入力して下さい。",Type:=1)
'開始行が入力された場合
If Sline <> False Then
'開始行のチェック
'終了削除行のセット
Eline = Sline + 37
'削除確認メッセージ
S = MsgBox(Sline & "~" & Eline & _
"行を削除します。", _
vbOKCancel + vbExclamation, _
"行削除確認")
If S = vbOK Then
Rows(Sline & ":" & Eline).Select
Selection.Delete Shift:=xlUp
End If
End If
End Sub
これを実行すると
Selection.Delete Shift:=xlUp のところで、
実行時エラー 1004
RangeクラスのDeleteメソッドが失敗しました。
でとまってしまいます。
どなたか対応策を教えてください。
よろしくおねがいいたします。

教えて!goo グレード

A 回答 (4件)

シートの保護とかしてある場合は、解除してから


削除し、再度 保護してください。
    • good
    • 0
この回答へのお礼

takntさん、こんにちは。
シート保護を解除したらできました!
どうもありがとうございました。

お礼日時:2003/07/08 08:39

なんか、他の方に使ってもらうことを考慮したか、複雑にしてありますが、骨子の


(1)
Sub test02()
s = InputBox("削除開始行=")
Rows(s & ":" & s + 3).Delete
End Sub
は私もテストしたが、動きました。
(2)
Sub test02()
s = Application.InputBox(prompt:="削除開始行を入力して下さい。", Type:=1)
Rows(s & ":" & s + 3).Delete
End Sub
も動きました。
(3)
Sub test02()
s = Application.InputBox(prompt:="削除開始行を入力して下さい。", Type:=1)
Rows(s & ":" & s + 3).Select
Selection.Delete Shift:=xlUp
End Sub
も動きました。
ロジックの問題ではないですね。
    • good
    • 0
この回答へのお礼

imogasiさん、こんにちは。
そうなんです、他の人間に頼まれてこのようなこと
をしております。(初心者の私に頼むほど超初心者からの
依頼です)

いろいろ試していただいてありがとうございました。

お礼日時:2003/07/08 08:46

こんにちは。



Excel97で試しましたが、少なくともExcel97ではシート保護の場合に出るメッセージとは異なるようです。
expression を省略した場合に、起こる事が多い現象だと思っています。
おまじないで削除処理の前に ActiveCell.Activate を入れてみてはどうでしょうか?

例は下記の点も手を加えてます。
1.Integerの範囲を超えるケースを想定し、変数 Sline と Eline を Long に。
2.MsgBoxの戻り値はInteger型なので、変数 S を Integer に。
3.65536行を超えないように処理を追加。

Sub 削除()
Dim Sline As Long, Eline As Long, S As Integer
 Sline = Application.InputBox("削除開始行を入力して下さい。", Type:=1)
 'Falseなら抜ける
 If Sline = False Then Exit Sub
 '最大行を超えたら最大行まで
 if Sline > 65536 Then
   MsgBox "最大行を超えています",vbOKOnly,"終了" : Exit Sub
 End If
 Eline = Sline + 37
 If Eline > 65536 Then Eline = 65536
 S = MsgBox(Sline & "~" & Eline & "行を削除します。", _
     vbOKCancel + vbExclamation, "行削除確認")
 'OK以外なら抜ける
 If S <> vbOK Then Exit Sub
 'おまじない
 ActiveCell.Activate
 Rows(Sline & ":" & Eline).Delete Shift:=xlUp
End Sub
    • good
    • 0
この回答へのお礼

papayukaさん、こんにちは。
確かに最大行数を超えた場合の処理も必要ですよね。
どうもありがとうございました。

お礼日時:2003/07/08 08:44

#1の方に同意です。



削除処理の前に
 ActiveSheet.Unprotect
処理の後に
 ActiveSheet.Protect
を追加してみてください。
    • good
    • 2
この回答へのお礼

happypointさん、こんにちは。
「シートを保護していた」とは質問に書いていな
かったのに即解明されたとは・・・・。
自分の勉強不足を痛感させられました。
ありがとうございました。

お礼日時:2003/07/08 08:43

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

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング