Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从数据验证下拉列表触发Excel VBA中的事件_Vba_Excel_Validation - Fatal编程技术网

从数据验证下拉列表触发Excel VBA中的事件

从数据验证下拉列表触发Excel VBA中的事件,vba,excel,validation,Vba,Excel,Validation,我有一个表格,我想让用户选择计算类型。计算类型通过数据验证中的列表选择完成。一旦选中,我希望它触发一个事件,然后加载该类型选择的正确单元格。如何在“数据验证”下拉列表中检测数据更改事件,或者是否需要为此使用active x控件 工作表更改事件的代码未激活: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.count > 1 Then Exit Sub Application.EnableEvents

我有一个表格,我想让用户选择计算类型。计算类型通过数据验证中的列表选择完成。一旦选中,我希望它触发一个事件,然后加载该类型选择的正确单元格。如何在“数据验证”下拉列表中检测数据更改事件,或者是否需要为此使用active x控件

工作表更改事件的代码未激活:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.count > 1 Then Exit Sub

Application.EnableEvents = False

On Error GoTo Errortrap


'~~> Change it to the relevant string with which you want to compare
StringToCheck = "+"

If Not Intersect(Target, Range("D47")) Is Nothing Then
    '~~> Check for the cell value
    If Target.Value = StringToCheck Then
      'setup row to capture addition fields
       Cells(33, 4).Value = "Input File 1"
       Cells(33, 4).Value = "Worksheet 1"
       Cells(33, 4).Value = "Cell 1"
       Cells(33, 4).Value = "Input File 2"
       Cells(33, 4).Value = "Worksheet 2"
       Cells(33, 4).Value = "Cell 2"
    End If
End If

LetsContinue:
   Application.EnableEvents = True
   Exit Sub
Errortrap:
    MsgBox Err.Description
    Resume LetsContinue
End Sub
你的代码很好。 我在一本新的工作簿中试用了它,它做的正是它应该做的。
当您将D47中的值更改为“+”(通过下拉或手动方式)时,它会在单元格D33中依次写入六个值

也许你是想写信

        Cells(33, 4).Value = "Input File 1"
        Cells(33, 5).Value = "Worksheet 1"
        Cells(33, 6).Value = "Cell 1"
        Cells(33, 7).Value = "Input File 2"
        Cells(33, 8).Value = "Worksheet 2"
        Cells(33, 9).Value = "Cell 2"
因此,代码将填充范围D33:I33,而不是将所有内容写入D33

您的代码很好。 我在一本新的工作簿中试用了它,它做的正是它应该做的。
当您将D47中的值更改为“+”(通过下拉或手动方式)时,它会在单元格D33中依次写入六个值

也许你是想写信

        Cells(33, 4).Value = "Input File 1"
        Cells(33, 5).Value = "Worksheet 1"
        Cells(33, 6).Value = "Cell 1"
        Cells(33, 7).Value = "Input File 2"
        Cells(33, 8).Value = "Worksheet 2"
        Cells(33, 9).Value = "Cell 2"

因此,代码将填充范围D33:I33,而不是将所有内容写入D33

,这在过去已被多次讨论过。在SO中进行搜索。看到我发布的这个代码示例,我做了一次搜索,没有找到任何东西-一定是使用了错误的搜索术语。我用一个链接更新了上面的评论。您必须使用
工作表\u Change
事件来捕获对具有DV.Hmm的单元格的更改,现在的问题是为什么在我的工作簿中没有检测到更改事件?计算设置为自动,我甚至在工作表中添加了“Application.Calculation=xlCalculationAutomatic”。激活事件可能是因为
enablevents
已关闭?请参阅此链接。请参见第3点,执行此操作。按CTL G弹出即时窗口,然后在即时窗口中键入该选项。application.EnableEvents=True,然后重试。如果你用你正在尝试的代码更新你的问题也会有帮助…这在过去已经被讨论过很多次了。在SO中进行搜索。看到我发布的这个代码示例,我做了一次搜索,没有找到任何东西-一定是使用了错误的搜索术语。我用一个链接更新了上面的评论。您必须使用
工作表\u Change
事件来捕获对具有DV.Hmm的单元格的更改,现在的问题是为什么在我的工作簿中没有检测到更改事件?计算设置为自动,我甚至在工作表中添加了“Application.Calculation=xlCalculationAutomatic”。激活事件可能是因为
enablevents
已关闭?请参阅此链接。请参见第3点,执行此操作。按CTL G弹出即时窗口,然后在即时窗口中键入该选项。application.EnableEvents=True,然后重试。如果你用你正在尝试的代码更新你的问题也会有帮助。。。