[[20200526153852]] 『UserInterfaceOnlyを書く場所』(ぶり) ページの最後に飛ぶ

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

 

『UserInterfaceOnlyを書く場所』(ぶり)

保護をかけているシート(複数)の中でもマクロを有効にするのに
UserInterfaceOnly=True が良いと見かけました。
が、どこに書けば良いのかわからないので教えてください。

Sub 会計報告()
'
' 会計報告 Macro
'

'

    Range("P6").Select
    Sheets("触らないでほしいシート").Select
    Range("E3").Select
    Application.CutCopyMode = False
    Selection.Consolidate Sources:= _
        "'C:\Users\sensei\Desktop\[会計簿.xlsm]触らないでほしいシート'!R3C2:R67C3", Function _
        :=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False
    Range("E4:F33").Select
    Selection.Copy
    Sheets("会計報告入力シート").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent2
        .TintAndShade = 0.599993896298105
        .PatternTintAndShade = 0
    End With
    Selection.NumberFormatLocal = "#;-#;"""";@"
End Sub

< 使用 Excel:Excel2019、使用 OS:Windows10 >


ん〜、書くところ無いです。 ActiveSheet.Protect UserInterfaceOnly:=True のように、保護かけるときに付けるものです。 そして、Trueにしてもブックを開きなおすと元に戻ってしまうので、ブックを開いたときにまたこれを実行しないとです。

面倒なので、どうせマクロなのだし、マクロ操作前にUnProtectして、操作後にProtectするほうが、後から見た人には判りやすいと思いますよ。
(???) 2020/05/26(火) 16:01


最近似たような話↓に回答しましたが、やるならブックを開いた直後じゃないですかね。
[[20200520225342]] 『VBA 特定の文字がある行を別のシートへ移動』(祈)

(もこな2 ) 2020/05/26(火) 16:05


???さん コメントありがとうございます。
マクロ操作前にUnProtectして、操作後にProtectする、とは
書く場所がよくわかっていないのですが、

Sub 会計報告()

 ' 
 ' 会計報告 Macro 
 ' 
 ' 
  Worksheets("触らないでほしいシート").Unprotect Password:="●●"
    Range("P6").Select
    Sheets("触らないでほしいシート").Select
    Range("E3").Select
    Application.CutCopyMode = False
    Selection.Consolidate Sources:= _
        "'C:\Users\sensei\Desktop\[会計簿.xlsm]触らないでほしいシート'!R3C2:R67C3", Function _
        :=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False
    Range("E4:F33").Select
    Selection.Copy
    Sheets("会計報告入力シート").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent2
        .TintAndShade = 0.599993896298105
        .PatternTintAndShade = 0
    End With
    Selection.NumberFormatLocal = "#;-#;"""";@"
  Worksheets("触らないでほしいシート").Protect Password:="●●", UserInterfaceOnly:=True
End Sub

で合ってますか??

(ぶり) 2020/05/26(火) 16:35


はい、入れる場所はそれでOKです。

ただ、この方法だと毎回Unprotectしているので、UserInterfaceOnlyは指定しなくて良いですよ。
UserInterfaceOnly=Trueにすると、以降は保護されたままでもマクロ編集できる、という意味ですから。
(ブックを開いた際に1回だけTrueにしておくと、以降はマクロはUnprotect不要、という使い方をします。ただ、これだと初回実行箇所と、マクロ編集する箇所で違うプロシジャになるので、後からコードを解析する人が、どこで保護を突破しているのか悩む、という事になりやすいです)

保護解除する必要のあるプロシジャがいっぱいある、というときは UserInterfaceOnly=True が効果的であり、数か所しかない程度ならば Unprotect/Protect が判りやすい、という感じです。
(???) 2020/05/26(火) 16:46


もろ被りですが書いたので投稿しておきます。

???さんではないですが、その順番だったら「UserInterfaceOnly:=True」いらないですよね。

 '---------------------------
 まくろすたーと
   シート保護解除
      やりたい処理
   シート保護
 まくろおわり
 '---------------------------
 まくろすたーと
   シート保護解除
   シート保護「UserInterfaceOnly:=True」

   やりたい処理

 まくろおわり
 '---------------------------
パターンとしては↑のどちらかでよいと思います。

(もこな2 ) 2020/05/26(火) 16:47


もこな2さん コメントありがとうございます。
返信かいているうちに更新されていました。

???さん UserInterfaceOnlyをはずしてみたらうまくいきました!
ありがとうございます。

もこな2さん
日本語で書いてもらえてものすごくわかりやすかったです。
ど素人なので「これはこういう意味かな?」と探りながら作っています。
命令を書く位置について特になぞだったのでありがたかったです。

お二方ありがとうございました!!

(ぶり) 2020/05/26(火) 17:04


コメント返信:

[ 一覧(最新更新順) ]


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