基于另一个工作表范围内的更改自动化宏

时间:2015-07-10 18:17:29

标签: excel vba excel-vba

每当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

3 个答案:

答案 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")

然后,只需使用函数名称

即可调用该函数从任何工作表运行

如果您需要更多详细信息,请发布所有代码到目前为止,我很乐意将其修改为适合