2017-09-25 103 views
1

我有下面的宏和我想要實現以下目標:Excel宏 - 所有未運行的替補

  1. 刪除第3行
  2. 自動調整每列
  3. 重命名一些列和刪除剩餘的。

它似乎只運行刪除前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 
+0

另外兩個潛艇永遠不會被調用,所以當然,他們不會執行。 – waka

+0

你如何運行你的代碼?將所有的子合併爲一個,然後嘗試。 – Maddy

回答

1

要調用內的另一個子,你只需要做一分:

Call Subname() 

括號如果沒有參數傳遞甚至是可選的。

所以,你可以編輯自己的第一子是這樣的:

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