2014-10-16 32 views
2

我对VBA,这个论坛和一般编程非常新颖。我有一个工作表,我已经设法谷歌和调整某些代码行按我的要求。将多个子插件组合成一个VBA子集

我的问题是我总共有三个潜艇,并且必须逐步运行每个VBA脚本。我希望将所有三个VBA脚本合并为一个。 (步骤1 +步骤2 +步骤3 =全部在一个小组中)

您能否告诉我如何将这些多个VBA脚本或Subs组合在一个单独的sub的umbrealla下,以便我只需运行VBA脚本一次而不是三次。

'---------Step1---------------------------------------- 
'----Run the macro press F5----- 
'======================================================================== 
' DELETES ALL ROWS FROM F DOWNWARDS WITH THE WORDs " " IN COLUMN F 
'======================================================================== 
    Sub DeleteRowWithContents() 
    Last = Cells(Rows.Count, "F").End(xlUp).Row 
    For i = Last To 1 Step -1 
     If (Cells(i, "F").Value) = "Ja" Or (Cells(i, "F").Value) = "Unbearbeitet" Or (Cells(i, "F").Value) = "-" Or (Cells(i, "F").Value) = "" Then 
    'Cells(i, "A").EntireRow.ClearContents ' USE THIS TO CLEAR CONTENTS BUT NOT DELETE ROW 
      Cells(i, "A").EntireRow.Delete 
     End If 
    Next i 
End Sub 

'-------------------------------Step 2-------------------- 
'---Run the macro, press F5. The macro compares the row contents in column A and if found a match deletes one of the results-- 


Sub btest() 
Dim LR As Long, i As Long 
LR = Range("A" & Rows.Count).End(xlUp).Row 
For i = LR To 2 Step -1 
    If Range("A" & i).Value = Range("A" & i - 1).Value Then Rows(i).Delete 
Next i 
End Sub 

'-----------------Step 3--------- 
'--------Delete Unwanted Columns and adjust the column width---- 
Sub sbVBS_To_Delete_EntireColumn_For_Loop() 
Dim iCntr 
Dim kCntr 
Dim jCntr 
For iCntr = 1 To 4 Step 1 
Columns(2).EntireColumn.Delete   '-----Del unwanted columns---- 
Next 
For kCntr = 1 To 3 Step 1 
Columns(3).EntireColumn.Delete 
Next 
For jCntr = 1 To 8 Step 1 
Columns(4).EntireColumn.Delete 
Next 
ActiveSheet.Columns("A").Columnwidth = 20 '----Adjust Column width--- 
ActiveSheet.Columns("C").Columnwidth = 25 
ActiveSheet.Columns("E").Columnwidth = 25 
End Sub 

回答

1
Sub Main() 

    DeleteRowWithContents 
    btest 
    sbVBS_To_Delete_EntireColumn_For_Loop 

End Sub 

应该做的。

可选你可以用Private修饰前缀的其他潜艇,使他们不会在宏窗口(ALT + F8 电子表格视图)出现,你只有Main列出。

或者,您可以让其他3个step-subs采用虚拟可选参数将其从“宏”对话框中隐藏起来。

1

@ vba4all-非常感谢。它像一个魅力。我如何把这个问题解决?

@ futureresearchers-这就是代码的样子..

Sub Main() 
'======================================================================== 
' DELETES ALL ROWS FROM F DOWNWARDS WITH THE WORDs " " IN COLUMN F 
'======================================================================== 
    Last = Cells(Rows.Count, "F").End(xlUp).Row 
    For i = Last To 1 Step -1 
     If (Cells(i, "F").Value) = "Ja" Or (Cells(i, "F").Value) = "Unbearbeitet" Or (Cells(i, "F").Value) = "-" Or (Cells(i, "F").Value) = "" Then 
    'Cells(i, "A").EntireRow.ClearContents ' USE THIS TO CLEAR CONTENTS BUT NOT DELETE ROW 
      Cells(i, "A").EntireRow.Delete 
     End If 
    Next i 

    '---Run the macro, press F5. The macro compares the row contents in column A and if found a match deletes one of the results and the complete row-- 
    Dim LR As Long, x As Long 
    LR = Range("A" & Rows.Count).End(xlUp).Row 
    For x = LR To 2 Step -1 
    If Range("A" & x).Value = Range("A" & x - 1).Value Then Rows(x).Delete 
    Next x 

    '--------Delete Unwanted Columns and adjust the column width---- 

    Dim lCntr 
    Dim kCntr 
    Dim jCntr 
    For lCntr = 1 To 4 Step 1 
    Columns(2).EntireColumn.Delete   '-----Del unwanted columns here the col b,c,d, e is to be deleted---- 
    Next 
    For kCntr = 1 To 3 Step 1 
    Columns(3).EntireColumn.Delete   '--enable or disable this loc if you dont wish to further delete cols--- 
    Next 
    For jCntr = 1 To 8 Step 1 
    Columns(4).EntireColumn.Delete   '--enable or disable this loc if you dont wish to further delete cols--- 
    Next 
    ActiveSheet.Columns("A").ColumnWidth = 20 '----Adjust Column width--- 
    ActiveSheet.Columns("C").ColumnWidth = 25 
    ActiveSheet.Columns("E").ColumnWidth = 25 


End Sub 
相关问题