Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2013)
シート保護設定時 セルの編集について 再投稿
投稿日時: 19/11/12 12:09:28
投稿者: 正彦

simple様,ありがとうございました。
 
 
'オートシェイプの挿入・編集 可
’Lockされていないセルの書式化 可
’VBAからの操作 可
’Lockされているセルの選択 不可
 
長いのですが,以下がコードです。よろしくお願いいたします。
 
Sub 保護設定()
 
 
Const Pass = "passw0rd"
Dim rc As VbMsgBoxResult
Dim i As Long
Dim h As Long
Dim Sht As Worksheet
Dim aa As Long
Dim ss As Long
Dim mystr As String
Dim Jidou As Long
Dim daycnt As Long
Dim w As Long, X As Long, Y As Long, z As Long
 
 
Application.ScreenUpdating = False
 
ThisWorkbook.unProtect Password:=Pass
 
 
Jidou = 8
daycnt = 7
 
 
For Each Sht In Worksheets
mystr = Left(Sht.Name, 1)
 
 
 If mystr = "第" Then
                 
                Sht.Activate
                        ActiveSheet.Unprotect Password:=Pass
                       
                         Range(Columns(85), Columns(141)).EntireColumn.Hidden = False '固定
                        
 
                           ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(59 + 6 * (Jidou - 1), 4 + 2 * Jidou * 7)).Address
 
                          With ActiveSheet.PageSetup
                           
                            .Orientation = xlLandscape
                            .TopMargin = 10
                            .BottomMargin = 10
                            .LeftMargin = 15
                            .RightMargin = 10
                            .Zoom = False
                            .FitToPagesWide = 1
                            .FitToPagesTall = 1
 
                          End With
 
                         ActiveWindow.DisplayHeadings = False
                         ActiveWindow.DisplayGridlines = False
                          
                          
                         Cells.Locked = True
                         Cells.FormulaHidden = True
                          
                          
                         Cells(1, 9).MergeArea.Locked = False
                          
'Lockを外すセルを指定しています。
'これらのセルは結合されています。
 
                         For aa = 1 To 7
                         Range(Cells(3, 5 + 2 * Jidou * (aa - 1)), Cells(3, 20 + 2 * Jidou * (aa - 1))).Locked = False
                          
                         Next
 
 
                         For ss = 1 To daycnt
 
                            For aa = 1 To 7 * Jidou
                                Range(Cells(5 + 7 * (ss - 1), 5 + 2 * (aa - 1)), Cells(5 + 7 * (ss - 1), 6 + 2 * (aa - 1))).Locked = False
                                Range(Cells(6 + 7 * (ss - 1), 5 + 2 * (aa - 1)), Cells(11 + 7 * (ss - 1), 6 + 2 * (aa - 1))).Locked = False
                            Next
                         Next
 
 
                         For aa = 1 To Jidou
                          
                            Range(Cells(56 + 6 * (aa - 1), 34), Cells(59 + 6 * (aa - 1), 50)).Locked = False
                          
                         Next
 
'オートシェイプの挿入・編集 可
’Lockされていないセルの書式化 可
’VBAからの操作 可
’Lockされているセルの選択 不可
 
                        ActiveSheet.Protect DrawingObjects:=False, Contents:=True, _
                        AllowFormattingCells:=True, UserInterfaceOnly:=True, Password:="passw0rd"
                        ActiveSheet.EnableSelection = xlUnlockedCells
  
                        Range(Columns(85), Columns(141)).EntireColumn.Hidden = True
 
  
                         
                        ActiveWindow.DisplayHeadings = False
                        ActiveWindow.DisplayGridlines = False
                        ActiveWindow.DisplayWorkbookTabs = True
                        ActiveWindow.ScrollColumn = 1
                        ActiveWindow.ScrollRow = 1
                        Range("E5").Select
                 
                End If
                 
Next
  
 
 
ThisWorkbook.Protect Password:=Pass, Structure:=True, Windows:=False
 
Application.ScreenUpdating = True
   
 
End Sub

回答
投稿日時: 19/11/15 18:01:32
投稿者: WinArrow
投稿者のウェブサイトに移動

別のスレで解決したと思いますので
こちらは、閉じましょう。

回答
投稿日時: 19/11/15 18:38:50
投稿者: simple

他人からのコメントがついていないものは、削除できるはずです。
もっと前に、こちらの削除をお願いしましたが、聞き入れられなかったのは残念です。
 
以下、今後に向けたことを書きます。
コードは省略しないようにとは書いたが、それと同時に、
事象が再現するできるだけ小さいコードを提示するようにしてください。
事象が再現する限りにおいては、コード量が多くなってもかまいませんが、
少なくともページ設定関係は不要なはずです。
(そのあたり、いったんコメントにして、それでも再現するなら含めたらよいはずです。)
また範囲を絞り込む作業をするなかで間違いに気づくこともよくあります。
 
また、インデントもきちんとつけたほうがいいですね。
 
なお、今回は、
Cells.FormulaHidden = True
は元々不要だったということであっさり幕引きとなりましたが、
それぞれのコードの効果、意味をきちんと理解して使ってください。
それがなされていれば、もともと質問に及ぶ必要もなかったということですから。

投稿日時: 19/11/15 22:30:27
投稿者: 正彦

おかげで解決でき,ありがとうございました。変更した箇所や追加した箇所がもとで,にっちもさっちもいかなくなっていました。
一つ一つのコードの意味とその影響を確認していきます。ありがとうございました。
 
 それから,初めての利用だったので,誤って別のスレッドを立ててしまいご迷惑をおかけしました。取り急ぎ最初に立てたスレッドを消します。