0

誰かが私を助けてくれるのではないかと思います。

以下のコードを使用しています。実行中の多くのアクションの中で、Excel スプレッドシート内で新しいレコードが作成されると、列 "A" に日付が自動的に入力され、列 "AS" にテキスト値 "No" が入力されます。

Option Explicit
Public preValue As Variant
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Cell As Range, res As Variant
    Dim rCell As Range
    Dim Rng1 As Range
    Dim Rng2 As Range
    Dim Rng3 As Range


    Application.EnableCancelKey = xlDisabled
    'Sheets("Input").Protect "handsoff", UserInterFaceOnly:=True, AllowFiltering:=True, AllowFormattingColumns:=True

    If Target.Column = 3 Then
        If Target = "No" Then MsgBox "Please remember to make the same change to all rows for " & Target.Offset(0, -1).Value & " and delete any future forecasts"
    End If

       If Target.Cells.Count > 1 Then Exit Sub
    On Error Resume Next

    If Not Intersect(Target, Range("B5:AD400", "AF5:AQ400")) Is Nothing Then
        If Target.Value <> preValue And Target.Value <> "" Then
            Application.EnableEvents = False
           With Rows(Target.Row)
                    .Range("A1").Value = Date
                    .Range("AS1").Value = "No"
        End With
            Application.EnableEvents = True
            Target.Interior.ColorIndex = 35
        End If
    End If

    On Error GoTo 0
    If Target.Column = 45 Then
                If Target.Value = "Yes" Then
                Set Rng1 = Application.Union(Cells(Target.Row, "B").Resize(, 19), Cells(Target.Row, "R"))
                Rng1.Interior.ColorIndex = xlNone
                Set Rng2 = Application.Union(Cells(Target.Row, "S").Resize(, 12), Cells(Target.Row, "AD"))
                Rng2.Interior.ColorIndex = 37
                Set Rng3 = Application.Union(Cells(Target.Row, "AF").Resize(, 12), Cells(Target.Row, "AQ"))
                Rng3.Interior.ColorIndex = 42
                End If
    End If

    If Not Intersect(Target, Range("J7:J400")) Is Nothing Then
        Set Cell = Worksheets("Lists").Range("B2:C23")
        res = Application.VLookup(Target, Cell, 2, False)
    If IsError(res) Then
        Range("K" & Target.Row).Value = ""
    Else
        Range("K" & Target.Row).Value = res
    End If
    End If

End Sub

可能であれば、列「A」に日付を挿入するときに、列「C」の同じ行にテキスト値「選択」を挿入したいと思います。この値は、ドロップダウン メニューの最初の値から取得され、「RDStaff」という名前の範囲で「Lists」というシートに設定されます。

列「A」に日付が入力されるとすぐに、リストの最初の値、つまり「選択」が列「C」に自動的に入力されるように、機能を変更する方法を教えてください。

多くの感謝と親切な敬意

クリス

4

1 に答える 1

1

列 C のどのセルが検証リストが使用されているかは正確にはわかりませんが、以下のコードを with ステートメントに追加すると、もちろん、適切なドロップダウン セルに調整して機能するはずです。

.Range("C1").Value = Sheets(1).Range("C10").Value

ここで、検証に基づいてドロップダウン リストがセル C10 のワークブックの最初のシート (インデックスによる) にあると仮定します。データ/ワークブックの構造に合わせてこれらを調整する必要があります。

ポイントは、値をハードコーディングしないことです。ドロップダウン リストの場所から値を参照します。

コメントに従って、検証リストをコードに追加するためのコード スニペットを次に示します。

With Rows(Target.Row)

    '... your existing code
    With Range("C1").Validation
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween,  Formula1:=Lists!RDStaff ' you may need to make this named range global for it to work on another sheet in this context
      .IgnoreBlank = True
      .InCellDropdown = True
    End With

End WIth
于 2012-12-23T17:46:11.627 に答える