如何在另一个工作表中的一个工作表上的偏移单元格中搜索宏

时间:2014-09-24 10:29:21

标签: excel vba excel-vba

这是我的第一个问题,如果我做错了什么,请耐心等待。

快速后退...在表C中的“购买”中我想要购买的物品的名称,在列D中我想要数量,在列G中我想要物品的位置。例如,我想要将10箱瓷砖送到办公室。 C2 = Tiles,D2 = 10,G2 = Office

当项目的位置输入到G列(单元格更改)时,我希望宏偏移到C列中的同一行,然后在工作表“Office”上的A列中搜索值,我目前有这个用于搜索单元格是否发生变化;

Private Sub worksheet_change(ByVal target As Range)

Dim keycells As String
keycells = "g2:g9999"
If Application.Intersect(ActiveCell, Range(keycells)) = "Office" Then MsgBox "hello"

End Sub

这确实有效,但它也检查所有其他单元格是否发生了变化,我不希望它这样做。代替“msgbox”hello“”我想让它的脚本偏移到C列中的同一行,查看该值,然后在“Office”表上的A列中搜索该值。

如果发现我需要宏将新购买的数量添加到工作表“Office”上的当前数量(这将是B列),如果找不到,我需要它添加C&列中的信息。 D表单“购买”到A列和A列。乙

此外,我还需要在脚本中添加更多位置,并随着时间的推移为这些位置提供工作簿中的工作表

如果可能的话,我将非常感谢所提供的所有帮助

1 个答案:

答案 0 :(得分:0)

Worksheet_Change事件将触发所有单元格更改。

为了防止代码运行,除非单元格在G列中,您可以这样限制它:

Private Sub worksheet_change(ByVal target As Range)

Dim keycells As String
Dim iSect

If target.Column = 7 Then
    keycells = "g2:g9999"
    Set iSect = Application.Intersect(target, Range(keycells))
    If Not iSect Is Nothing Then
        If lcase(target) = "office" Then
            MsgBox "hello"
            ' add code here to copy the data
        End If
    End If
End If

End Sub

但是,更好的解决方案可能是在目标工作表中使用公式(例如数组公式或使用INDEX和MATCH)来提取数据 - 这将避免完全使用宏。