这是我的第一个问题,如果我做错了什么,请耐心等待。
快速后退...在表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列。乙
此外,我还需要在脚本中添加更多位置,并随着时间的推移为这些位置提供工作簿中的工作表
如果可能的话,我将非常感谢所提供的所有帮助
答案 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)来提取数据 - 这将避免完全使用宏。