[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.