excel - 宏通过几个模块
问题描述
我再次征求您的意见...我有几个宏,如果某个单元格或范围在另一个工作表上发生更改,则应由 Worksheet_Calculate 激活它们。一切正常,但我注意到,一些宏不会在它们的“End Sub”处停止,而是跳转到另一个宏,这导致表中的列没有被排序。这是我所拥有的:Worksheet_Calculate
Private Sub Worksheet_Calculate()
Static OldVal As Variant
If Range("AL2").Value <> OldVal Then
OldVal = Range("AL2").Value
Call RF
ElseIf Range("AM2").Value <> OldVal Then
OldVal = Range("AM2").Value
Call SEAL
ElseIf Range("AN2").Value <> OldVal Then
OldVal = Range("AN2").Value
Call SUVPCR
ElseIf Range("AO2").Value <> OldVal Then
OldVal = Range("AO2").Value
Call Segment
ElseIf Range("AU2").Value <> OldVal Then
OldVal = Range("AU2").Value
Call RRC
ElseIf Range("AW2").Value <> OldVal Then
OldVal = Range("AW2").Value
Call WG
ElseIf Range("AY2").Value <> OldVal Then
OldVal = Range("AY2").Value
Call dB
ElseIf Range("BA2").Value <> OldVal Then
OldVal = Range("BA2").Value
Call Noise_em
End If
End Sub
RF 的宏似乎很好,如果我按 F8 单独运行它,它会执行而无需去其他地方:
Sub RF()
On Error Resume Next
If Sheets("All_list").Range("AL2").Value = "No" Then
ActiveWorkbook.Worksheets("All_list").ListObjects("All").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("All_list").ListObjects("All").Sort.SortFields.Add2 _
Key:=Range("All[[#All],[RF]]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("All_list").ListObjects("All").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ElseIf Sheets("All_list").Range("AL2").Value = "Yes" Then
ActiveWorkbook.Worksheets("All_list").ListObjects("All").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("All_list").ListObjects("All").Sort.SortFields.Add2 _
Key:=Range("All[[#All],[RF]]"), SortOn:=xlSortOnValues, Order:= _
xlDescending, DataOption:=xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("All_list").ListObjects("All").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ElseIf Sheets("All_list").Range("AL2").Value = "All" Then
ActiveWorkbook.Worksheets("All_list").ListObjects("All").Sort.SortFields.Clear
End If
End Sub
但是这个(段)也可以单独工作,但不能在 Worksheet_calculate 中,由于某种原因它会跳转到 RF 后记。
Sub Segment()
Dim x() As Variant
With Sheets("All_list")
.Range("AP2:AP10").Clear
.Range("AO2:AO10" & .Cells(.Rows.Count, "AO").End(xlUp).Row).Copy
.Range("AP2").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
x = Application.Transpose(Sheets("All_list").Range("AP2:AP10").Value)
ActiveWorkbook.Worksheets("All_list").ListObjects("All").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("All_list").ListObjects("All").Sort.SortFields.Add2 _
Key:=Range("All[Segment]"), SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:=Join(x, ","), DataOption:=xlSortNormal
End With
With ActiveWorkbook.Worksheets("All_list").ListObjects("All").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xl`enter code here`TopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
这基本上意味着像 RF(Seal,SUVPCR)这样的宏可以一起运行,甚至是 Segment,但是在 Segment 之后似乎没有任何排序,一切都在它上面。当我将其替换为类似的示例 RRC 时,该 RRC 起作用,但在它之后又什么都没有。很感谢任何形式的帮助。谢谢
解决方案
好的,谢谢大家支持,已经搞定了
Private Sub Worksheet_Calculate()
Static OldVal As Variant
Static OldVal2 As Variant
Static OldVal3 As Variant
Static OldVal4 As Variant
Static OldVal5 As Variant
Static OldVal6 As Variant
Static OldVal7 As Variant
Static OldVal8 As Variant
Application.EnableEvents = False
If Range("AL2").Value <> OldVal Then
OldVal = Range("AL2").Value
Call RF
ElseIf Range("AM2").Value <> OldVal2 Then
OldVal2 = Range("AM2").Value
Call SEAL
ElseIf Range("AN2").Value <> OldVal3 Then
OldVal3 = Range("AN2").Value
Call SUVPCR
ElseIf Range("AO2").Value <> OldVal4 Then
OldVal4 = Range("AO2").Value
Call Segment
ElseIf Range("AU2").Value <> OldVal5 Then
OldVal5 = Range("AU2").Value
Call RRC
ElseIf Range("AW2").Value <> OldVal6 Then
OldVal6 = Range("AW2").Value
Call WG
ElseIf Range("AY2").Value <> OldVal7 Then
OldVal7 = Range("AY2").Value
Call dB
ElseIf Range("BA2").Value <> OldVal8 Then
OldVal8 = Range("BA2").Value
Call Noise_em
End If
Application.EnableEvents = True
End Sub
我忘记将 OldVal 分别分配给每个范围,这个技巧让我很开心。正如您所建议的,我还包括了安全的关闭/开启事件,尽管在这种情况下它似乎根本没有效果。再次感谢支持
推荐阅读
- javascript - 为 Android 构建 Ionic 时出现“CALL_AND_RETRY_LAST 分配失败”错误
- python - Beautiful Soup 无法在 html 中找到所有图像标签(正好停在 5 处)
- sql - 根据加入SQL Server的条件执行查询
- javascript - 过渡属性在 IE 和 Edge 浏览器中不起作用
- android - WebView 加载时间过长
- javascript - Electron,Spectron:如何在单独的 javascript 文件中编写测试用例
- javascript - event.originalEvent 的 Javascript 等效项?
- google-sheets - 将四个连续的单元格与另外四个连续的单元格匹配
- css - bootstrap 为选择下拉选择全宽
- java - 如何从 Java 代码中传递 JasperReport 中的整数参数值?