[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『年月で質問した者ですが』(大)
このような他のシートから参照しているマクロでシート内で自動で処理するようなマクロだと該当のシートが保護されているとエラーになるとおもいますがここで見た過去の質問のコードだとどうにしたら保護を解除しこの作業が終わりで保護を又かけられますか?
このコード内で組むとどうに書けば組めるのですか?
Sheet1のモジュール Private Sub Worksheet_Calculate() Dim c1 As Range, c As Range Dim x Set c1 = Me.Range("C6:AG164") For Each c In c1 Select Case c.Value Case 1 x = 25 Case 2 x = 3 Case 3 x = 7 Case 4 x = 15 Case 5 x = 22 Case 6 x = 10 Case Else x = xlNone End Select c.Interior.ColorIndex = x Next c End Sub
こちらでは解決しませんでしたか? [[20100503065520]] 『年月』(大) Private Sub Worksheet_Calculate() Dim c1 As Range, c As Range Dim x Set c1 = Me.Range("C6:AG164") Me.Unprotect For Each c In c1 Select Case c.Value Case 1 x = 25 Case 2 x = 3 Case 3 x = 7 Case 4 x = 15 Case 5 x = 22 Case 6 x = 10 Case Else x = xlNone End Select c.Interior.ColorIndex = x Next c Me.Protect End Sub 引数は省略しましたが、シートを編集するステートメントまでに プロテクト解除、編集が終わったらプロテクト、という順番です。 ご提示のコードでは c.Interior.ColorIndex = x がシート(セル) を変更しているコード。 (みやほりん)(-_∂)b
「うそ」ついちゃいけませんね。 マクロの記録では [[20100503065520]] のコードは作れませんよ。 (みやほりん)(-_∂)b
ActiveSheet.Unprotect Sheets("TOP").Select Dim buf As String buf = InputBox("年を入力してください。" & vbNewLine & "閲覧の方はキャンセルを押してください ") If buf = "" Then Exit Sub Range("集計!B1") = buf buf = InputBox("月を入力してください。" & vbNewLine & "閲覧の方はキャンセルを押してください ") If buf = "" Then Exit Sub Range("集計!E1") = buf MsgBox "入力された年は" & Range("集計!B1").Value & "年です。 " MsgBox "入力された月は" & Range("集計!E1").Value & "月です。 " Range("集計!F1").Value = "'" & Range("集計!B1").Value & "年" & Range("集計!E1").Value & "月" MsgBox "あなたの設定したシフト表は・・・" & Range("集計!F1").Value & "度分です。 " Range("a40").Value = Range("集計!B1").Value & "年" & Range("集計!E1").Value & "月" MsgBox "これより指定された年/月に変更! " & Range("集計!F1").Value & "度に変更しました。 " Sheets("集計").Select ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _ False Sheets("TOP").Select End Sub このように追加しましたがみやほりんさんならどう書きますか?(大) Sheets("集計").Select ActiveSheet.Unprotect Sheets("TOP").Select
Sheets("集計").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _ False Sheets("TOP").Select お追加しました。
Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2010/5/4 ユーザー名 : あけ' ' ActiveSheet.Unprotect '1)選択しているシートの 保護を解除 Range("A1").Select '2)A1セルをセレクト ActiveCell.FormulaR1C1 = "321 '3)選択しているセルを 321 ActiveSheet.Protect 'DrawingObjects:=True, Contents:=True, Scenarios:=True '4)選択しているシートの 保護 End Sub 2)〜3)のコードを 実行したいことに変更してみて下さい。 マクロの記録とコメント化したものです。上記のマクロを実行したら 参考になりますでしょうか?
(あけ)
コードの書き方も力量も違いますから・・ (mitsu)
大さんが試行錯誤した結果 希望する動作をしていれば、それでよいのでは?
コードを追加した位置も間違っていないと思います。
「うそ云々」の部分は私の早とちりだったようです。 不快な思いをさせてしまったようで、ごめんなさい。 さて、 Unprotect のあとにProtect しないで Exit Subするところが2箇所あります。 つまり、保護を解除したままマクロが終了してしまうことがあるということです。 これが都合が悪い、と推測した上で書かせてもらいます。対策は、 (1)Exit Sub する前に Protectを実行する (2)Unprotectを 2箇所のExit Subのあとに実行する のどちらかです。 (1)の場合 Dim buf As String Sheets("集計").Unprotect Sheets("TOP").Select buf = InputBox("年を入力してください。" & vbNewLine & "閲覧の方はキャンセルを押してください ") If buf = "" Then Sheets("集計").Protect DrawingObjects:=False, Contents:=True, Scenarios:= False Exit Sub End If Range("集計!B1") = buf buf = InputBox("月を入力してください。" & vbNewLine & "閲覧の方はキャンセルを押してください ") If buf = "" Then Sheets("集計").Protect DrawingObjects:=False, Contents:=True, Scenarios:= False Exit Sub End If Range("集計!E1") = buf MsgBox "入力された年は" & Range("集計!B1").Value & "年です。 " MsgBox "入力された月は" & Range("集計!E1").Value & "月です。 " Range("集計!F1").Value = "'" & Range("集計!B1").Value & "年" & Range("集計!E1").Value & "月" MsgBox "あなたの設定したシフト表は・・・" & Range("集計!F1").Value & "度分です。 " Range("a40").Value = Range("集計!B1").Value & "年" & Range("集計!E1").Value & "月" MsgBox "これより指定された年/月に変更! " & Range("集計!F1").Value & "度に変更しました。 " Sheets("集計").Protect DrawingObjects:=False, Contents:=True, Scenarios:= False おおむねこのようなコードになります。 (2)の場合は、変数bufを使いまわしているので、やりづらい。変数を二つにしてみます。 Dim buf1 As String , buf2 As String Sheets("TOP").Select buf1 = InputBox("年を入力してください。" & vbNewLine & "閲覧の方はキャンセルを押してください ") If buf1 = "" Then Exit Sub buf2 = InputBox("月を入力してください。" & vbNewLine & "閲覧の方はキャンセルを押してください ") If buf2 = "" Then Exit Sub Sheets("集計").Unprotect Range("集計!B1") = buf1 Range("集計!E1") = buf2 MsgBox "入力された年は" & Range("集計!B1").Value & "年です。 " MsgBox "入力された月は" & Range("集計!E1").Value & "月です。 " Range("集計!F1").Value = "'" & Range("集計!B1").Value & "年" & Range("集計!E1").Value & "月" MsgBox "あなたの設定したシフト表は・・・" & Range("集計!F1").Value & "度分です。 " Range("a40").Value = Range("集計!B1").Value & "年" & Range("集計!E1").Value & "月" MsgBox "これより指定された年/月に変更! " & Range("集計!F1").Value & "度に変更しました。 " Sheets("集計").Protect DrawingObjects:=False, Contents:=True, Scenarios:= False ちなみに、Range("集計!B1") という書き方を私自身はしないので その書き方の部分はできるだけ手はつけていません。 (みやほりん)(-_∂)b
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.