Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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 桌子。如果其他单元格发生更改,则更新单元格_Excel_Vba - Fatal编程技术网

Excel 桌子。如果其他单元格发生更改,则更新单元格

Excel 桌子。如果其他单元格发生更改,则更新单元格,excel,vba,Excel,Vba,我不是这里的专家。使用一个巨大的excel表格,某种销售渠道。我希望实现以下目标:如果我更改一个单元格(具有数据验证列表)的值,我希望更改同一行上另一个单元格的值。基本上,如果机会变为“赢”,我希望同一行的概率单元格变为100%。 我搜索了一些,找到了一些解决方案,但大多数都是基于std-excel的使用,而我专门使用了一个表(ListObject)。我必须“表现”不同吗 我没有为此编写任何代码,因为我的编码技能是基本的,并且基于internet复制/粘贴+编辑。使用公式不是一个选项,因为我希望

我不是这里的专家。使用一个巨大的excel表格,某种销售渠道。我希望实现以下目标:如果我更改一个单元格(具有数据验证列表)的值,我希望更改同一行上另一个单元格的值。基本上,如果机会变为“赢”,我希望同一行的概率单元格变为100%。 我搜索了一些,找到了一些解决方案,但大多数都是基于std-excel的使用,而我专门使用了一个表(ListObject)。我必须“表现”不同吗

我没有为此编写任何代码,因为我的编码技能是基本的,并且基于internet复制/粘贴+编辑。使用公式不是一个选项,因为我希望在商机没有“赢”的情况下,该单元格仍然可以编辑

编辑: 到目前为止,我所做的工作如下:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.ListObjects("tblSalesPipeline").ListColumns("Status").DataBodyRange) Is Nothing Then
        If Target.Value = "Won" Then
        MsgBox "Congratulations!"
    Else
        MsgBox "Idiot!"
    End If
  End If
End Sub

显然,MSBE只是测试它是否有效。我现在要了解的是如何处理概率列中的特定行…

尝试使用偏移函数(第一个参数是行偏移,第二个参数是列偏移+向右移动,-向左移动),假设“概率”列是向右的两列:

If Not Intersect(Target, Me.ListObjects("tblSalesPipeline").ListColumns("Status").DataBodyRange) Is Nothing Then
    If Target.Value = "Won" Then
        Target.Offset(0,2).Value2 = 1
        MsgBox "Congratulations!"

为此,您可以在VBA代码中查找。我猜是这样的。我需要了解的是,当我在桌子上工作时,我是否需要以不同的方式对待它。换句话说,我不知道如何告诉Excel检查表中更改的内容是否在标题为“Status”的列中,如果是,更改是否是某个单元格更改为“win”。如果是这样,请确定“赢得”单元格的行,并将“100”放在单元格中,标题“概率”仅在同一行中。使用
Intersect
ListColumns(“状态”)
…好的,现在研究它。如果您能提供更多信息,我将不胜感激……值得注意的是,通常您还应该在这个事件处理程序的开始处
Application.EnableEvents=False
(然后将其返回到
True
,在
结束子部分之前)。