根据另一个工作表范围内的更改自动执行macros

我试图自动化一个macros,以便在sheet1上的一个范围内的单元格更改时在sheet2上运行。 我已经尝试了一些东西,我没有vba的经验,知道他们有什么问题。 基本上,工作表1有我的input,我给每个项目分配一个优先级1-5。 Sheet2只显示排名为1,3或4的项目。我使用if语句做了这个,但是这在表格中留下了一堆空行,所以我可以使用筛选函数将空行sorting。 如果我更改工作表1的排名,我希望我的工作表2自动更新。 我写了一个sorting函数,适当地使用我的sheet2数据,但是我正在努力使它自动化,以便在sheet1中的任何内容被更改时自动更新。 到目前为止,我一直在使用worksheet_change,并且可以在sheet1被更改时获取sheet1的重新过滤,这不是我想要的。 有任何想法吗?

这是我目前的sortingfunction:

Sub ReSort() With Worksheets("Sheet2") .Range("$A$2:$D$34").AutoFilter Field:=2 .Range("$A$2:$D$34").AutoFilter Field:=2, Criteria1:="<>" End With End Sub 

这个:

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A:A")) Is Nothing Then ' Do something End If End Sub 

应该做的伎俩

我终于搞定了! 对于那些阅读和有类似的问题,我有这个代码保存在sheet1中:

 Sub ReSort() 'This function filters my table spanning A2:D34 by the second column and sorts out the blanks With Worksheets("Sheet2") .Range("$A$2:$D$34").AutoFilter Field:=2 .Range("$A$2:$D$34").AutoFilter Field:=2, Criteria1:="<>" End With End Sub Private Sub Worksheet_Change(ByVal Target As Range) 'This function runs my ReSort function if any cell on sheet1 in E3:E34 or G3:G34 is changed If Not Intersect(Target, Range("$E$3:$E$34,$G$3:$G$34")) Is Nothing Then ReSort End If End Sub 

感谢大家的帮助! 我真的很沮丧地把头发拉出来。

听起来就像你在正确的道路上,worksheet_change是正确的方法,因为你希望当sheet1被改变的时候运行这个macros,所以你需要检测这个macros。

我怀疑你只是缺less一件事,运行在sheet2上的macros,明确地把它放在模块参考表2中

例如,

 Worksheets("Sheet1").Range("A1") 

而不是仅仅

 Range("A1") 

然后你可以调用该函数从任何表单运行,只需使用函数名称即可

如果你需要更多的细节,发布到目前为止所有的代码,我会愉快地修改它以适应