[[20120113155728]] 『非表示シートに対する VBAからの操作(delete)』(ヒロ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『非表示シートに対する 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.