合并2个私有子VBA代码

时间:2018-09-11 12:53:25

标签: excel vba excel-vba

我有2个Private Sub Worksheet_change(ByVal目标范围)代码可以独立工作。我需要他们在同一张纸上工作。每当我这样做第二代码不会运行。我该如何合并这些!!

代码1:

Private Sub Worksheet_Change(ByVal Target As Range)
     Dim rng As Range, cel As Range
     Set rng = Intersect(Target, Range([H2], Cells(Rows.Count, 
     "H").End(xlUp)))

     If rng Is Nothing Then Exit Sub
     Application.EnableEvents = False
     rng.Offset(, 1).FormulaR1C1 = "=IF(RC[-1]<>"""",R1C[6] & ""-"" &" & 
     "TEXT(COUNTA(R2C[-1]:RC[-1]),""0000"") & ""-"" & R1C[7],"""")"
     Application.EnableEvents = True
End Sub

如果H中提供了信息,则代码1使用P1和O1在I列中填充一个自动数字 代码2:

Private Sub Move_blanks_To_Bottom(ByVal Target As Range)
    If Target.CountLarge > 1 Then Exit Sub
    If Target.Column <> 9 Then Exit Sub
    Range("A1", Range("A" & Rows.Count).End(xlUp)).Resize(, 11).Sort 
    key1:=Range("I1"), order1:=xlAscending, Header:=xlYes
End Sub

代码2正在使用I列并对值进行排序,因此,如果I中有一个值,则它将行移至下一个可用行,如果I单元格为空白,则I列将有效地完成,该行将移至底部。

据我了解,您不能运行2个私人子代码,那么我将如何同时在同一张纸上同时运行这两个子代码?

谢谢!

1 个答案:

答案 0 :(得分:1)

由于您的第一个代码在Exit Sub)失败时退出(Intersect,因此您必须在If语句上方调用第二个子例程。您必须将其传递给{ {1}}以及:

Target

但是,我认为最好重写一下。不必到处都退出子例程,而要在If语句中放置相关的代码位,以便例程可以运行到完成并正常退出:

 Call Move_blanks_To_Bottom(Target)