每当sheet1上某个范围内的单元格发生变化时,我都会尝试自动运行一个宏来运行sheet2。我尝试了很多东西,但我没有vba经验来了解它们有什么问题。基本上,sheet1有我的输入,我为每个项目分配了1-5级的优先级。 Sheet2仅显示排名为1,3或4的项目。我使用if语句执行此操作,但这会在我的表中留下一堆空行,因此我可以使用过滤器函数对空行进行排序。如果我在sheet1上更改排名,我希望我的sheet2表自动更新。我写了一个sort函数来适当地调整我的sheet2数据,但我正在努力自动化它,以便当sheet1中的任何内容发生更改时它会自动更新。到目前为止,我一直在使用worksheet_change,并且可以在sheet1更改时将sheet1重新过滤,这不是我想要的。有什么想法吗?
这是我目前的排序功能:
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
答案 0 :(得分:3)
此:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
' Do something
End If
End Sub
应该做的伎俩
答案 1 :(得分:1)
我终于开始工作了!对于阅读此问题并遇到类似问题的人,我将此代码保存在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
感谢大家的帮助!我很沮丧地把头发拉出来。
答案 2 :(得分:0)
听起来你正好在正确的道路上,workheet_change是正确的方法,因为你希望在更改sheet1时运行宏,所以你需要检测它。
我怀疑你只是缺少一件事,在sheet2上运行的宏,明确地将它放在模块参考表2中
例如,
Worksheets("Sheet1").Range("A1")
而不仅仅是
Range("A1")
然后,只需使用函数名称
即可调用该函数从任何工作表运行如果您需要更多详细信息,请发布所有代码到目前为止,我很乐意将其修改为适合