[[20120120131042]] 『visibleプロパティを設定出来ません』(toppy) ページの最後に飛ぶ

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

 

『visibleプロパティを設定出来ません』(toppy)

 Mainというシートを除きあと全てを非表示にしようとしています。
 ThisWorkbook.Sheets(Worksheets(I).Name).Visible = xlVeryHidden
 部分で、
 worksheetクラスの visibleプロパティを設定出来ません。 
 とエラーが5回に1回くらいの頻度で発生します。
 どなたか教えて頂けるでしょうか。

    Dim I As Long
    For I = 1 To ThisWorkbook.Sheets.Count
        If ThisWorkbook.Worksheets(I).Name <> "Main" Then
            ThisWorkbook.Sheets(Worksheets(I).Name).Visible = xlVeryHidden 'Excelメニュー操作から表示出来なくする。
        End If
    Next I
Excel2003 2010


 >For I = 1 To ThisWorkbook.Sheets.Count
 は、Sheetsコレクションの数を数えています。
 Sheetsにはグラフシートなどワークシート以外も含まれます。

 >If ThisWorkbook.Worksheets(I).Name <> "Main" Then
 ここではWorksheetsコレクションのIndexで処理しようとしています。
 ワークシート以外のシートがある場合、ここでIndexが合わなくなります。

 >ThisWorkbook.Sheets(Worksheets(I).Name).Visible = xlVeryHidden 
 ここではSheetsコレクションに対してWorksheetsの名前を渡しています。
 しかし、Worksheets(I)の部分にはThisWorkbookが無いのでThisworkbookとは限らず
 アクティブなブックのワークシート名が与えられます。

 という3つの矛盾というか統一のとれていないコードが原因だと思います。
 そこを考慮して書きなおしてみてください。
 (momo)

 momoさんご回答たいへんありがとうございました
 修正してみましたが、やはりエラーする事がありますが、
 まだおかしいでしょうか。

    Dim i As Long
    For i = 1 To ThisWorkbook.Worksheets.Count
        If ThisWorkbook.Worksheets(i).Name <> "Main" Then
            ThisWorkbook.Sheets(ThisWorkbook.Worksheets(i).Name).Visible = xlVeryHidden 'Excelメニュー操作から表示出来なくする。
        End If
    Next i
(toppy) 

 ちょっとコードを変更して・・・

  Sub test1()
  Dim i As Long
  For i = 1 To ThisWorkbook.Worksheets.Count
      If ThisWorkbook.Worksheets(i).Name <> "Main" Then
          ThisWorkbook.Worksheets(i).Visible = xlVeryHidden 'Excelメニュー操作から表示出来なくする。
      End If
  Next i
  End Sub

 とか

  Sub test2()
  Dim ws As Worksheet
  For Each ws In ThisWorkbook.Worksheets
      If ws.Name <> "Main" Then
          ws.Visible = xlVeryHidden
      End If
  Next ws
  End Sub

 これでもエラーが出ますか?これで出るようであれば
 Mainというシートが無いのでは?(半角スペースなどの誤記も含めて)
 (momo)

 momoさんもおっしゃっていますが、シート名が合っていないような気がします。
 シート全てを非表示にはできないので、Mainというシート名がなければ当然エラー
 メッセージがでてしまいます。

 (se_9)

例として
 Sub test()
    Dim shName As String
    Dim i As Long
    shName = "Main"’"main" でもok
    With ThisWorkbook
    If Not IsObject(Evaluate("'" & "[" & .Name & "]" & shName & "'!A1")) Then
        MsgBox "存在しません"
        Exit Sub
    Else
        If .Sheets(shName).Name <> shName Then
            MsgBox .Sheets(shName).Name & vbCrLf & shName & vbCrLf & "違いが有りますが、実行します。 "
            shName = .Sheets(.Sheets(shName).Name).Name
        End If
        MsgBox .Sheets(shName).Visible
        If .Sheets(shName).Visible >= 0 Then
            MsgBox .Sheets(shName).Name & "シートが非表示のため再開"
            .Sheets(shName).Visible = 1
        End If
        For i = 1 To .Worksheets.Count
            If .Worksheets(i).Name <> shName Then
                .Sheets(.Worksheets(i).Name).Visible = xlVeryHidden 'Excelメニュー操作から表示出来なくする。
            End If
        Next i
    End If
    End With
End Sub
(beginner)一部変更しました。1/21 21:30

とんでもない事をしておりご迷惑をおかけしている事がわかりました。
 ここで聞いているマクロを動かす前に、シート、ブックの保護関係を処理しているマクロがあり、
 それらを動作させるかしないかのパターンがいくつか有るために、今回相談しているマクロがエラー
 したりしなかったりすることがやっとわかりました。
 つまり、ブックを他のマクロが保護した状態で、今回相談しているマクロを動かしたりしていたわけです。
 私の意図しないタイミングでブックを保護していたことと、ブック保護が今回のマクロに影響する事を認識していなかったためです。
 大変ご迷惑おかけしました。
 ただ、コード的にも間違っていたわけで、また他の場面でエラーしていたと思われますので、大変助かりました。ありがとうございました
(toppy) 

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.