Vba 根据另一工作表范围内的更改自动执行宏
我试图在sheet1上某个范围内的单元格发生更改时,自动在sheet2上运行宏。我已经尝试了很多事情,但我没有vba的经验来知道它们有什么问题。基本上,sheet1有我的输入,我为每个项目分配了优先级1-5。表2仅显示排名为1、3或4的项目。我用if语句完成了这个操作,但是在我的表中留下了一行空白行,所以我可以使用过滤函数对空白行进行排序。如果我更改sheet1上的排名,我希望sheet2表自动更新。我编写了一个排序函数,可以适当地引用sheet2数据,但我正在努力使其自动化,以便在sheet1中的任何内容发生更改时自动更新。到目前为止,我一直在使用工作表_change,当sheet1被更改时,我可以让sheet1重新过滤,这不是我想要的。有什么想法吗 这是我当前的排序功能:Vba 根据另一工作表范围内的更改自动执行宏,vba,excel,Vba,Excel,我试图在sheet1上某个范围内的单元格发生更改时,自动在sheet2上运行宏。我已经尝试了很多事情,但我没有vba的经验来知道它们有什么问题。基本上,sheet1有我的输入,我为每个项目分配了优先级1-5。表2仅显示排名为1、3或4的项目。我用if语句完成了这个操作,但是在我的表中留下了一行空白行,所以我可以使用过滤函数对空白行进行排序。如果我更改sheet1上的排名,我希望sheet2表自动更新。我编写了一个排序函数,可以适当地引用sheet2数据,但我正在努力使其自动化,以便在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
Sub度假村()
带工作表(“表2”)
.Range(“$A$2:$D$34”)。自动筛选字段:=2
.Range(“$A$2:$D$34”)。自动筛选字段:=2,标准1:=“”
以
端接头
听起来您走的是正确的道路,工作表\u更改是正确的方法,因为您确实希望在sheet1更改时运行宏,因此需要检测到这一点
我怀疑您只是遗漏了一件事,在sheet2上运行的宏,将其明确地放在模块引用sheet2中
比如说,
Worksheets("Sheet1").Range("A1")
而不仅仅是
Range("A1")
然后,只需使用函数名,就可以从任何工作表调用函数运行
如果您需要更多详细信息,请发布到目前为止的所有代码,我将很高兴地对其进行修改以适应听起来您走的是正确的道路,工作表更改是正确的方法,因为您确实希望宏在sheet1更改时运行,因此您需要检测它 我怀疑您只是遗漏了一件事,在sheet2上运行的宏,将其明确地放在模块引用sheet2中 比如说,
Worksheets("Sheet1").Range("A1")
而不仅仅是
Range("A1")
然后,只需使用函数名,就可以从任何工作表调用函数运行
如果您需要更多详细信息,请发布到目前为止的所有代码,我将很高兴地对其进行修改以适应以下情况:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
' Do something
End If
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
Sub度假村()
'此函数通过第二列过滤跨越A2:D34的表,并对空白进行排序
带工作表(“表2”)
.Range(“$A$2:$D$34”)。自动筛选字段:=2
.Range(“$A$2:$D$34”)。自动筛选字段:=2,标准1:=“”
以
端接头
私有子工作表_更改(ByVal目标作为范围)
'如果E3:E34或G3:G34中sheet1上的任何单元格发生更改,此功能将运行my ReSort功能
如果不相交(目标,范围($E$3:$E$34,$G$3:$G$34”))则不算什么
求助
如果结束
端接头
谢谢大家的帮助!我对这件事感到很沮丧,真是大发雷霆。我终于让它起作用了!对于阅读本文并有类似问题的读者,我将此代码保存在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
Sub度假村()
'此函数通过第二列过滤跨越A2:D34的表,并对空白进行排序
带工作表(“表2”)
.Range(“$A$2:$D$34”)。自动筛选字段:=2
.Range(“$A$2:$D$34”)。自动筛选字段:=2,标准1:=“”
以
端接头
私有子工作表_更改(ByVal目标作为范围)
'如果E3:E34或G3:G34中sheet1上的任何单元格发生更改,此功能将运行my ReSort功能
如果不相交(目标,范围($E$3:$E$34,$G$3:$G$34”))则不算什么
求助
如果结束
端接头
谢谢大家的帮助!我对此感到非常沮丧。请发布您迄今为止尝试过的代码。“我编写了一种函数”-什么函数?它现在是如何运行的?请不要使用MS Office/VBA。请发布您迄今为止尝试过的代码。“我编写了一种函数”-什么函数?现在如何运行?请不要使用MS Office/VBA。欢迎使用StackOverflow!你能解释一下为什么它会起作用吗?谢谢!代码以Intersect方法为中心,该方法返回一个表示两个范围相交的对象。在这种情况下,它返回一些表示目标(单元格更改)与指定范围相交的对象。如果使用Intersect方法创建的对象“不存在任何内容”(也称为两个不相交),那么代码将不会执行任何操作。然而,如果它“不是什么”(呵呵),它会触发“做点什么”。这段代码最初是2003年发布的。欢迎使用StackOverflow!你能解释一下为什么它会起作用吗?谢谢!代码以Intersect方法为中心,该方法返回一个表示两个范围相交的对象。在这种情况下,它返回一些表示目标(单元格更改)与指定范围相交的对象。如果使用Intersect方法创建的对象“不存在任何内容”(也称为两个不相交),那么代码将不会执行任何操作。然而,如果它“不是什么”(呵呵),它会触发“做点什么”。这段代码最初来自2003年的文章。我应该在哪里保存我的函数?它们是否需要保存在同一个位置?我应该在哪里保存我的函数?它们需要保存在同一个地方吗?