在Excel中具有下拉菜单的列

时间:2011-11-01 18:00:10

标签: excel vba worksheet-function

我是业余的VBA用户,需要一些指导...

我在Excel中有两个工作表(1)结算,(2)合同。 Billing Sheet有一个列,其中包含带有结算说明的下拉菜单。专栏B& C是开始&停止时间。 D列是合同表中的“成本”,与结算说明相关联。根据结算说明,填充D列(Billing Sheet)中的成本。

我需要一个公式(如果可能)或VBA代码的帮助,如果用户从下拉列表中输入超出合同的内容,“合同描述”将替换初始下拉条目和超额描述将自动下拉到下面的行,并自动填充开始和放大在同一行停止时间。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

像这样的东西(进入工作表代码模块)

Private Sub Worksheet_Change(ByVal Target As Range)

    Const VAL_TRIPLE As String = "Triple"
    Const VAL_DOUBLE As String = "Double"
    Dim rng As Range, cost

    On Error GoTo haveError

    Set rng = Target.Cells(1)

    If rng.Column = 1 And rng.Row > 1 Then

        DoEvents 'run the cost lookup...
        cost = rng.EntireRow.Cells(4).Value

        With rng
            If .Value = VAL_DOUBLE Or .Value = VAL_TRIPLE Then
                Application.EnableEvents = False

                .Offset(1, 0).Insert
                .Offset(1, 0).Value = .Value
                If IsNumeric(cost) Then
                   .Offset(1, 3).Value = cost * IIf(.Value = VAL_TRIPLE, 2, 1)
                End If
                .Value = "replacement" 'how to know what goes here?
                .Offset(1, 1).Value = .Offset(0, 1).Value
                .Offset(1, 2).Value = .Offset(0, 2).Value

                Application.EnableEvents = True
            End If
        End With
    End If

    Exit Sub

haveError:
    Application.EnableEvents = True

End Sub