Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8268 / 13646 ツリー ←次へ | 前へ→

【34277】セルをロックしたらマクロが動きません さちきょん 06/1/30(月) 14:47 質問[未読]
【34278】Re:セルをロックしたらマクロが動きません やっちん 06/1/30(月) 15:43 発言[未読]
【34297】Re:セルをロックしたらマクロが動きません ganko 06/1/30(月) 21:36 発言[未読]
【34305】Re:セルをロックしたらマクロが動きません chuchu 06/1/30(月) 23:53 お礼[未読]
【34317】処理の前後にプロテクト解除・プロテクト. さちきょん 06/1/31(火) 14:25 質問[未読]
【34318】Re:処理の前後にプロテクト解除・プロテク... やっちん 06/1/31(火) 14:44 発言[未読]
【34321】Re:処理の前後にプロテクト解除・プロテ... さちきょん 06/1/31(火) 15:41 質問[未読]
【34332】Re:処理の前後にプロテクト解除・プロテ... ganko 06/1/31(火) 20:20 発言[未読]
【34334】Re:処理の前後にプロテクト解除・プロテ... さちきょん 06/1/31(火) 20:54 発言[未読]
【34336】Re:処理の前後にプロテクト解除・プロテ... やっちん 06/1/31(火) 21:33 発言[未読]

【34277】セルをロックしたらマクロが動きません
質問  さちきょん  - 06/1/30(月) 14:47 -

引用なし
パスワード
   以前にもこちらで教えていただいたものです。
在庫表を作成し、完成したのでセルにロックをかけたら
エラーがでて動かなくなってしまいました。

E列のA〜Eの値ごとに、表示の組み合わせが変わり、X列に表示します。

F、H、J、L列には在庫実数を、G、I、K、Mには下の数式が
入っていて、条件にあてはまる値がX列に表示されます。
=IF(F8="","",IF(F8<2,"00",IF(F8<6,"01",IF(F8<10,"02","99"))))

ロックし隠したいのは、G、I、K・・・列とX列です。

数式の入っている列(またはセル)をロックしたり
隠したりすると、マクロが動かなくなってしまうのでしょうか?

初歩的な質問ですみません。
よろしくお願いいたします。


E列 F G H I J K L・・・・・X

A    2   0   0  ・・・・S/2,M/0,L/0,O/0
B
C
D
E

【34278】Re:セルをロックしたらマクロが動きません
発言  やっちん  - 06/1/30(月) 15:43 -

引用なし
パスワード
   ▼さちきょん さん:
こんにちは。

>エラーがでて動かなくなってしまいました。
コードのどこでエラーが出て、何というメッセージが出ているのか
書いてもらわないとよくわかりません。

ただ、シートの保護をかけてエラーになるようなら
保護をかけているセルに対して何らかの変更を行う処理をしているのでしょうね。
コードの中で保護を解除して処理をして最後に保護をかけなおすということに
なると思います。

【34297】Re:セルをロックしたらマクロが動きません
発言  ganko  - 06/1/30(月) 21:36 -

引用なし
パスワード
   ▼さちきょん さん:

今晩は。
 やっちん さんの指摘のように

>コードの中で保護を解除して処理をして最後に保護をかけなおすということに
>なると思います。

  Sheets("XXX").Unprotect
      :
      :
  Sheets("XXX").Protect

で、出来ると思いますが。

【34305】Re:セルをロックしたらマクロが動きません
お礼  chuchu  - 06/1/30(月) 23:53 -

引用なし
パスワード
   ▼ganko さん、やっちんさん

ご回答どうもありがとうございます。
うまくできました!!


>▼さちきょん さん:
>
>今晩は。
> やっちん さんの指摘のように
>
>>コードの中で保護を解除して処理をして最後に保護をかけなおすということに
>>なると思います。
>
>  Sheets("XXX").Unprotect
>      :
>      :
>   Sheets("XXX").Protect
>
>で、出来ると思いますが。

【34317】処理の前後にプロテクト解除・プロテクト.
質問  さちきょん  - 06/1/31(火) 14:25 -

引用なし
パスワード
   すみません、再度質問です。
エクセル2002だとシート保護の細かい許可の設定ができるので
数式が入っていても大丈夫だと思ったのですが、2000の環境に
あわせないといけないため、やはりマクロ内にコードを入れて
プロテクトしなくてはいけませんでした。

処理の最初と最後にプロテクト解除、プロテクトのコードを
入れればよいとのことでしたが、入れる場所が違うのか、
最初の行の処理でエラーになってしまいます。

どのようにコードをいれればよいのか教えてください。
よろしくお願いいたします。


Private Sub Worksheet_Change(ByVal Target As Range)
' 計算式セット自体でもイベントが発生するのでイベントを抑制
Application.EnableEvents = False

Dim v As Integer
Dim Size_S As String
Dim Size_M As String
Dim Size_L As String
Dim Size_O As String
Dim Size_XO As String
Dim Size_ML As String
Dim Size_OXO As String
Dim Size_LL As String
Dim Size_FREE As String
Dim Size_25_27 As String
Dim Size_Nothing As String
Dim Ladies_S As String
Dim Ladies_M As String
Dim Ladies_L As String
Dim Ladies_FREE As String
Dim strTEXT As String
Dim lngEndROW As Long


'最終行取得
lngEndROW = Range("E65536").End(xlUp).Row

If lngEndROW < 8 Then Exit Sub
For v = 8 To lngEndROW


  'IIf(expr, truepart, falsepart)
  
  Size_S = IIf(Range("G" & v).Value = "", "", "S/" & Range("G" & v).Value & ",")
  Size_M = IIf(Range("I" & v).Value = "", "", "M/" & Range("I" & v).Value & ",")
  Size_L = IIf(Range("K" & v).Value = "", "", "L/" & Range("K" & v).Value & ",")
  Size_O = IIf(Range("M" & v).Value = "", "", "O/" & Range("M" & v).Value & ",")
  Size_XO = IIf(Range("O" & v).Value = "", "", "XO/" & Range("O" & v).Value & ",")
  Size_ML = IIf(Range("I" & v).Value = "", "", "M-L/" & Range("I" & v).Value & ",")
  Size_OXO = IIf(Range("K" & v).Value = "", "", "O-XO/" & Range("K" & v).Value & ",")
  Size_LL = IIf(Range("M" & v).Value = "", "", "LL/" & Range("M" & v).Value & ",")
  Size_FREE = IIf(Range("Q" & v).Value = "", "", "フリー/" & Range("Q" & v).Value & ",")
  Size_25_27 = IIf(Range("S" & v).Value = "", "", "25-27cm/" & Range("S" & v).Value & ",")
  Size_Nothing = IIf(Range("U" & v).Value = "", "", "/" & Range("U" & v).Value & ",")
  Ladies_S = IIf(Range("G" & v).Value = "", "", "レディースS/" & Range("G" & v).Value & ",")
  Ladies_M = IIf(Range("I" & v).Value = "", "", "レディースM/" & Range("I" & v).Value & ",")
  Ladies_L = IIf(Range("K" & v).Value = "", "", "レディースL/" & Range("K" & v).Value & ",")
  Ladies_FREE = IIf(Range("M" & v).Value = "", "", "レディースフリー/" & Range("M" & v).Value & ",")
  
  Select Case Cells(v, 5).Value
    '値の取得(前br)
        
    Case "A"
      strTEXT = Size_S & Size_M & Size_L & Size_O & Size_XO
      Range("E" & v).Interior.Color = RGB(0, 128, 128)
      Range(Cells(v, 6), Cells(v, 20)).Interior.ColorIndex = xlNone
      Range(Cells(v, 13), Cells(v, 20)).Interior.Color = RGB(192, 192, 192)
     

    Case "B"

      ・
      ・
      ・


End Select
   
  If strTEXT <> "" Then
   
    '文字列(strTEXT,カンマ削除)
    
    strTEXT = Left(strTEXT, Len(strTEXT) - 1)
    Cells(v, 24).Value = strTEXT
    strTEXT = ""
    
  End If
  
   If Range("E" & v) = "" Then
  
   Range("E" & v).Interior.Color = RGB(255, 255, 255)
   MsgBox "カテゴリーを入力してください!", vbOKOnly, "カテゴリー"
   Exit For
   End If
  

Next v


'イベントを再開
Application.EnableEvents = True

End Sub


  

【34318】Re:処理の前後にプロテクト解除・プロテ...
発言  やっちん  - 06/1/31(火) 14:44 -

引用なし
パスワード
   ▼さちきょん さん:
せっかくなのでプロテクトの解除・設定を入れたコードを載せてください。
それと、エラーになる箇所が「最初の行」ではなく
どの行で何というメッセージが出ているのか書いてください。

【34321】Re:処理の前後にプロテクト解除・プロテ...
質問  さちきょん  - 06/1/31(火) 15:41 -

引用なし
パスワード
   ▼やっちん さん:

よろしくお願いいたします。

エラー箇所は、Worksheets("Sheet1").Unprotect
「カーソル下の識別子を認識できません」となっています。


Private Sub Worksheet_Change(ByVal Target As Range)
' 計算式セット自体でもイベントが発生するのでイベントを抑制

Worksheets("Sheet1").Unprotect
Application.EnableEvents = False

Dim v As Integer
Dim Size_S As String
Dim Size_M As String
Dim Size_L As String
Dim Size_O As String
Dim Size_XO As String
Dim Size_ML As String
Dim Size_OXO As String
Dim Size_LL As String
Dim Size_FREE As String
Dim Size_25_27 As String
Dim Size_Nothing As String
Dim Ladies_S As String
Dim Ladies_M As String
Dim Ladies_L As String
Dim Ladies_FREE As String
Dim strTEXT As String
Dim lngEndROW As Long


'最終行取得
lngEndROW = Range("E65536").End(xlUp).Row

If lngEndROW < 8 Then Exit Sub
For v = 8 To lngEndROW


  'IIf(expr, truepart, falsepart)
  
  Size_S = IIf(Range("G" & v).Value = "", "", "S/" & Range("G" & v).Value & ",")
  Size_M = IIf(Range("I" & v).Value = "", "", "M/" & Range("I" & v).Value & ",")
  Size_L = IIf(Range("K" & v).Value = "", "", "L/" & Range("K" & v).Value & ",")
  Size_O = IIf(Range("M" & v).Value = "", "", "O/" & Range("M" & v).Value & ",")
  Size_XO = IIf(Range("O" & v).Value = "", "", "XO/" & Range("O" & v).Value & ",")
  Size_ML = IIf(Range("I" & v).Value = "", "", "M-L/" & Range("I" & v).Value & ",")
  Size_OXO = IIf(Range("K" & v).Value = "", "", "O-XO/" & Range("K" & v).Value & ",")
  Size_LL = IIf(Range("M" & v).Value = "", "", "LL/" & Range("M" & v).Value & ",")
  Size_FREE = IIf(Range("Q" & v).Value = "", "", "フリー/" & Range("Q" & v).Value & ",")
  Size_25_27 = IIf(Range("S" & v).Value = "", "", "25-27cm/" & Range("S" & v).Value & ",")
  Size_Nothing = IIf(Range("U" & v).Value = "", "", "/" & Range("U" & v).Value & ",")
  Ladies_S = IIf(Range("G" & v).Value = "", "", "レディースS/" & Range("G" & v).Value & ",")
  Ladies_M = IIf(Range("I" & v).Value = "", "", "レディースM/" & Range("I" & v).Value & ",")
  Ladies_L = IIf(Range("K" & v).Value = "", "", "レディースL/" & Range("K" & v).Value & ",")
  Ladies_FREE = IIf(Range("M" & v).Value = "", "", "レディースフリー/" & Range("M" & v).Value & ",")
  
  Select Case Cells(v, 5).Value
    '値の取得(前br)
        
    Case "A"
      strTEXT = Size_S & Size_M & Size_L & Size_O & Size_XO
      Range("E" & v).Interior.Color = RGB(0, 128, 128)
      Range(Cells(v, 6), Cells(v, 20)).Interior.ColorIndex = xlNone
      Range(Cells(v, 13), Cells(v, 20)).Interior.Color = RGB(192, 192, 192)
     
                 
    Case "B"
      strTEXT = Size_ML & Size_OXO & Size_LL
      Range("E" & v).Interior.Color = RGB(51, 204, 204)
      Range(Cells(v, 6), Cells(v, 20)).Interior.ColorIndex = xlNone
      Range(Cells(v, 14), Cells(v, 20)).Interior.Color = RGB(192, 192, 192)
      Range("F" & v).Interior.Color = RGB(192, 192, 192)
      
    Case "C"
      strTEXT = Size_FREE
      Range("E" & v).Interior.Color = RGB(153, 204, 255)
      Range(Cells(v, 6), Cells(v, 20)).Interior.ColorIndex = xlNone
      Range(Cells(v, 6), Cells(v, 14)).Interior.Color = RGB(192, 192, 192)
      Range(Cells(v, 18), Cells(v, 20)).Interior.Color = RGB(192, 192, 192)
      
    Case "D"
      strTEXT = Size_25_27
      Range("E" & v).Interior.Color = RGB(204, 153, 255)
      Range(Cells(v, 6), Cells(v, 20)).Interior.ColorIndex = xlNone
      Range(Cells(v, 6), Cells(v, 16)).Interior.Color = RGB(192, 192, 192)
      Range(Cells(v, 20), Cells(v, 21)).Interior.Color = RGB(192, 192, 192)
      
    Case "E"
      strTEXT = Size_Nothing
      Range("E" & v).Interior.Color = RGB(255, 204, 153)
      Range(Cells(v, 6), Cells(v, 20)).Interior.ColorIndex = xlNone
      Range(Cells(v, 6), Cells(v, 18)).Interior.Color = RGB(192, 192, 192)
      
    Case "F"
      strTEXT = Ladies_S & Ladies_M & Ladies_L & Ladies_FREE
      Range("E" & v).Interior.Color = RGB(255, 153, 204)
      Range(Cells(v, 6), Cells(v, 20)).Interior.ColorIndex = xlNone
      Range(Cells(v, 14), Cells(v, 20)).Interior.Color = RGB(192, 192, 192)
      
   End Select
   
  If strTEXT <> "" Then
   
    '文字列(strTEXT,カンマ削除)
    
    strTEXT = Left(strTEXT, Len(strTEXT) - 1)
    Cells(v, 24).Value = strTEXT
    strTEXT = ""
    
  End If
  
   If Range("E" & v) = "" Then
  
   Range("E" & v).Interior.Color = RGB(255, 255, 255)
   MsgBox "カテゴリーを入力してください!", vbOKOnly, "カテゴリー"
   Exit For
   End If
  

Next v

Worksheets("Sheet1").Protect

'イベントを再開
Application.EnableEvents = True

End Sub

【34332】Re:処理の前後にプロテクト解除・プロテ...
発言  ganko  - 06/1/31(火) 20:20 -

引用なし
パスワード
   ▼さちきょん さん:

うろ覚えで申し訳ないですが、…
Unprotectするシートに事前にプロテクトを掛けておかないと
ダメだったと思いますが。
セルの書式設定⇒ロックの□のチェックと
シートのツール⇒で、シートの保護
を施し、上書き保存してから

マクロを実行で、いけたかと思います。
一度試してください。

【34334】Re:処理の前後にプロテクト解除・プロテ...
発言  さちきょん  - 06/1/31(火) 20:54 -

引用なし
パスワード
   ▼ganko さん:

ご回答ありがとうございました。
事前にプロテクトを掛けておきましたが、
一ヶ所だけ入力ができて、その後プロテクトされて
しまいます。繰り返し処理ごとに、解除→保護を
するためには、Unprotectとprotectの位置が
おかしいのでしょうか?

【34336】Re:処理の前後にプロテクト解除・プロテ...
発言  やっちん  - 06/1/31(火) 21:33 -

引用なし
パスワード
   ▼さちきょん さん:
こんばんは。
エラーの原因はわかりませんね。
こちらではエラーになりません。
ただ、
Worksheets("Sheet1").Unprotect
Application.EnableEvents = False

>If lngEndROW < 8 Then Exit Sub
の後に入れるべきですね。

「カーソル下の識別子を認識できません」ですが
コンパイルは通っているのでしょうか?
それとカーソル下となっているので
どこの部分にカーソルが当たっていますか?

8268 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free