2016-12-13 8 views
1

別のセルにテキストに基づいてセルをロックI:VBAは - 「YES」の欄に入力されたとき、私は電子メールを送信するために、現在のコードを使用してい

Private Sub Worksheet_Calculate() 

Dim FormulaRange As Range 
Dim NotSentMsg As String 
Dim MyMsg As String 
Dim SentMsg As String 
Dim MyLimit As Double 

NotSentMsg = "Not Sent" 
SentMsg = "Sent" 

MyLimit = 0 

Set FormulaRange = Me.Range("S3:S100") 

On Error GoTo EndMacro: 
For Each FormulaCell In FormulaRange.Cells 
    With FormulaCell 
     If IsNumeric(.Value) = False Then 
      MyMsg = "Not numeric" 
     Else 
      If .Value > MyLimit Then 
       MyMsg = SentMsg 
       If .Offset(0, 1).Value = NotSentMsg Then 
        Call Mail_with_outlook 
       End If 
      Else 
       MyMsg = NotSentMsg 
      End If 
     End If 
     Application.EnableEvents = False 
     .Offset(0, 1).Value = MyMsg 
     Application.EnableEvents = True 
    End With 
Next FormulaCell 

ExitMacro: 
Exit Sub 

EndMacro: 
Application.EnableEvents = True 

MsgBox "Some Error occurred." _ 
    & vbLf & Err.Number _ 
    & vbLf & Err.Description 
End Sub 

私もコピーするには、次のコードを持っています/特定の値を貼り付け終了時に、スプレッドシートロック:

Private Sub Workbook_BeforeClose(Cancel As Boolean) 

'Step 1: Protect the sheet with a password 
Sheets("Sweden").Range("R3:R1000").Copy 
Sheets("Sweden").Range("Q3").PasteSpecial Paste:=xlPasteValues 
Sheets("Sweden").Range("A1").Select 
Sheets("Sweden").Protect Password:="password" 
'Step 2: Save the workbook 
ActiveWorkbook.Save 
End Sub 

質問及び要求を「YES」列I中の任意のセルに入力されると、列H中の対応する行のセルが編集のためにロックされなければなりません灰色のマークが付いています。つまり、列Hでその値を調整することはできません。どうすればこの値をc私は持っているodes?

H = IF(I5 = "YES"、FALSE)列のセルに対してデータ検証を使用しようとしましたが、それでもセル内の値を削除できます。

また、2桁以上の小数の入力を制限するために、列Hに別のデータ検証がありますので、VBAをソリューションとして使用したいと考えています。

どのようなVBAコードを使用するのか、どこに置くべきかアドバイスしてください。下のスプレッドシートの画像を参照してください。

Current spreadsheet

答えて

1

これは私があなたを助けることができるものである: 質問と要件:「YES」が列Iの任意のセルに入力すると、列Hの対応する行のセルが編集用にロックされなければなりません灰色のマークが付いています。つまり、列Hの値を調整することはできません。これを私のコードにどのように組み込むことができますか?あなたはこれをしたいシート、オン

は、次のように入力します。

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Column = 9 And UCase(Target) = "YES" Then 'I is number 9 
     Cells(Target.Row, 8).Interior.Color = 12566463 
     Cells(Target.Row, 8).Locked = True 
     ActiveSheet.Protect "mypasswordissecurebecauseitisextremelylong" 
    End If 

End Sub 

それは(はい、はい、はい、はい)列9でどれでも有りかどうかを確認するでしょうし、それが内部を変更します列8ではグレーになる。さらに、セルをロックします。 編集用にロックするには、パスワードで保護する必要があります。

+0

ありがとうございました。しかし、私は現在のシートにこのコードを追加すると(Private Sub Worksheet_Calculate()の上にすでにある)、実行時エラー12と、 'Target.Column = 9の場合にはデバッグポイントを取得し、UCase(Target)= "YES" –

+0

まず、実行時エラー12を見たことはありません。通常は13です。しかし、私が想定していることは、最初はシート内のすべてのセルがロックされている可能性があるということですしたがって、2回目の実行時にはエラー「1004」が発生します。これを回避するには、最初のクリックプロパティからすべてのセルを選択し、「ロック」チェックのマークを解除します。 – Vityata

+0

はい、申し訳ありませんが、実行時エラー13を書きます。また、「範囲を編集できるようにする」を使用しています。つまり、H列には特定のパスワードがあり、データを追加することができます。とにかく、シートの保護を解除し、列HとIのすべてのセルがロックされていないことを確認すると、それは動作します。しかし、ファイルを閉じようとすると、実行時にエラー13が表示され、コード内の同じ行を指しています...? –

関連する問題