Excel宏 - 未运行所有Subs

时间:2017-09-25 12:08:53

标签: excel vba excel-vba

我有以下宏,我正在努力实现以下目标:

  1. 删除前3行
  2. 自动调整每列
  3. 重命名一些列并删除剩余的列。
  4. 它似乎只运行删除前3行的第一个例程而没有别的。我是Macro的新手,所以我似乎错过了运行所有Subs的重要内容吗?

    选项明确

    Sub sbDeleteARowMulti()
      Rows("1:3").Delete
    End Sub
    
    Sub sbChangeColumnWidthMulti()
      Columns("A:Z").AutoFit
    End Sub
    
    
    Sub RenDelCols()
      Dim vCols As Variant
      Dim vNames As Variant
      Dim iCols As Integer
      Dim iCol As Integer
      Dim wks As Worksheet
      Dim i As Integer
    
    
    
      'define the worksheet
      Set wks = Worksheets("timesheets2")
      'Cols in Receiving to be renamed
      vCols = Array(2, 9, 14, 15, 16, 19) 'Cols A,L,N,Q,X,Y
      'Names from Order to rename them to
      vNames = Array("Project", "Supervisor", "Employee", "Status", "Date", "Time")
    
      With wks
        iCols = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For iCol = iCols To 1 Step -1
          i = 0
          'check if col number is one to change
          On Error Resume Next
          i = Application.WorksheetFunction.Match(iCol, vCols, 0)
          On Error GoTo 0
          If i = 0 Then
            'column is not in list, delete it
            .Columns(iCol).EntireColumn.Delete
          Else
            'col is in list, rename it
            .Cells(1, iCol).Value = vNames(i - 1)
          End If
        Next
      End With
    End Sub
    

1 个答案:

答案 0 :(得分:1)

要在另一个子区域内调用子区域,您只需执行以下操作:

Call Subname()

如果没有要传递的参数,括号甚至是可选的。

所以你可以像这样编辑你的第一个子:

Sub sbDeleteARowMulti()
    Rows("1:3").Delete
    Call sbChangeColumnWidthMulti
    Call RenDelCols
End Sub