[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『非表示シートに対する VBAからの操作(delete)』(ヒロ)
いつもお世話になっております。 久しぶりの質問です^^;
非表示シートに対して Worksheets(シート名).Rows(指定行).Deleteとしたところ、 “RangeクラスのDeleteメソッドが失敗しました”とメッセージがでました。 Worksheets(シート名).Rows(指定行).cut Worksheets(シート名).Rows(指定行).insert はできるのですが、 deleteはできないという解釈でよいのでしょうか?
ん?? できるよ。 変数 指定行 には実際に何がはいっていたんだろうか? コードを全てアップしたら?
もちろん、そのシートが行削除できないようなシート保護がかかっていれば表示/非表示関係なくこのエラーになる。
(ぶらっと)
あ、もう少し詳しく書きますね。
といってもコードはこれだけです。 Worksheets(sheetNM).Rows(r).Delete
call で呼び出しているサブルーチンのなかの一行で sheetNMは引数渡しでシート名を渡しています。(例:sheetNM="データシート") rに関しても同様に引数渡しで削除対象の行が入っています。(例:r=10)
>もちろん、そのシートが行削除できないようなシート保護がかかっていれば... 保護はかけています。 がマクロからのアクセスを有効にするために、ブックオープン時に UserInterfaceOnly:=True としております。 これではだめなんでしょうか?
質問しながら各所ググっておりますが、なかなか求めるものにたどりつけておりません。 よろしくお願いいたします。
(ヒロ)
>UserInterfaceOnly:=True
これは「万能」ではない。 保護セルには書き込めるけど、他の操作に関してはあくまで、許可されたものに対してのみOK。 (たとえば並び替えを許可していないシート保護状態でマクロで並び替えるとエラーになるね)
(ぶらっと)
ぶらっとさん、ありがとうございます。
ちなみに、 保護をかけて非表示にしたシートに対して、下記処理を実行してみたところ deleteのみがエラーになりました。
Private Sub CommandButton1_Click() Worksheets("data").Rows(5).Copy Worksheets("data").Rows(1).Insert Worksheets("data").Rows(10).Cut Worksheets("data").Rows(1).Insert Worksheets("data").Rows(5).Delete End Sub
deleteも似たようなものだという気がするのですが 結果はダメなんですねぇ・・・>< 結局、clear&cut&insertの3ステップで行削除するしかなさそうですね^^;
ありがとうございました。
新しいブックで、簡単なテストを行ってみるとどうですか?
こちらは2002ですが特に何も意識せず操作した場合 問題なく実行されている様に思いますので 何か環境が違うのでしょうね?
一つブックを用意して、標準モジュールに '------ Sub 保護と非表示() With Worksheets(1) With .Range("A1:A20") .Value = "=ROW(A1)" .Value = .Value End With .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True MsgBox .ProtectContents .Visible = False End With End Sub Sub マクロ変更許可() Worksheets(1).Protect UserInterfaceOnly:=True End Sub Sub 各操作() With Worksheets(1) .Rows(5).Copy .Rows(1).Insert .Rows(10).Cut .Rows(1).Insert .Rows(5).Delete End With End Sub Sub 再表示() With Worksheets(1) .Visible = True .Select MsgBox .ProtectContents End With End Sub '------ ↑を入れて下さい。
さらにもう一つブックを作成。 そのブックをアクティブにした状態で、
1.(保護と非表示)を実行 メッセージボックスで「True」と出たら、先頭シートは保護中です。 2.(各操作)を実行 .Rows(1).Insert で実行時エラーになると思いますので、終了して下さい。 3.(マクロ変更許可)を実行 4.(各操作)を実行 5.(再表示)を実行
コピーした行にあった「5」が二つあって、削除した行にあった「3」が無くなっていると思いますが どうでしょう?
(HANA)
HANAさんありがとうございます。 お礼が遅くなりすみません。
早速やってみました。 当方はエクセル2007、Windows7です。
sheet2にボタンを4つ設置し下記処理をそれぞれ呼び出すようにして 動作確認してみました。
'標準モジュール Option Explicit
Sub マクロ変更許可() Call 保護と非表示 End Sub Sub マクロ変更非許可() Call 保護と非表示 Worksheets(1).Protect UserInterfaceOnly:=False End Sub Sub 保護と非表示() Worksheets(1).Protect UserInterfaceOnly:=True With Worksheets(1) .Range("A:A").Value = Null With .Range("A1:A20") .Value = "=ROW(A1)" .Value = .Value End With .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True MsgBox .ProtectContents .Visible = False End With End Sub Sub 各操作() With Worksheets(1) .Rows(5).Copy .Rows(1).Insert .Rows(10).Cut .Rows(1).Insert .Rows(5).Delete End With End Sub Sub 再表示() With Worksheets(1) .Visible = True .Select MsgBox .ProtectContents End With End Sub
マクロ変更を許可していない場合は確かにinsertでエラーとなりますが、 マクロ変更を許可して実行すると、insertは正常に抜けて、 やはりdeleteでエラーとなりました><
環境の問題なんでしょうかね? なにが悪いんだか・・・サッパリです>< 自宅のPCでもやってみて、また報告いたします。
(ヒロ)
何が悪いんでしょうねぇ。。。
環境としては 保護せずに非表示の場合は? 保護して表示の場合は? それぞれどうなんでしょう?
ご質問のタイトルからすると 「とにかく非表示の場合が駄目(保護の状態に関わらず)」 と言う感じは有りますが。。。
(HANA)
自宅PCも、Windows7、エクセル2007なんですが、 結果・・・だめでした。 同じくdeleteでエラーになります。
保護なし非表示ではエラーは出ませんでした。 保護あり表示ではdeleteでエラーになりました。 どうやら保護ありの時がダメなようです。 insertもdeleteも、行の増減という面からみると同じような処理だと思うのですが なにゆえ??という思いが消えません^^;
何とも残念な結果です。 また、いろいろとググってみます。
(ヒロ)
2007-Vista の環境でやってみましたが こちらは やはりエラーに成りませんでした。 2007-Win7 の問題なのかなぁ。。。
素直に、保護解除→行削除→再度保護 と言う行程では駄目なのでしょうか?
(HANA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.