【问题标题】:Combine Multiple Subs into One VBA Sub将多个 Subs 合并为一个 VBA Sub
【发布时间】:2014-10-16 12:10:00
【问题描述】:

我对 VBA、这个论坛和编程很陌生。我有一个工作表,我已经设法根据我的要求谷歌并调整了某些代码行。

我的问题是我总共有三个潜艇,必须逐步运行每个 VBA 脚本。我希望将所有三个 VBA 脚本合二为一。 (第 1 步 + 第 2 步 + 第 3 步 = 多合一子)

你能告诉我如何将这些多个 VBA 脚本或 Subs 组合在一个单独的 sub 的伞下,这样我只需运行 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

【问题讨论】:

    标签: vba excel


    【解决方案1】:
    Sub Main()
    
        DeleteRowWithContents
        btest
        sbVBS_To_Delete_EntireColumn_For_Loop
    
    End Sub
    

    应该这样做。

    您可以选择在您的其他 subs 前面加上 Private 修饰符,这样它们就不会出现在宏窗口中(ALT+F8 在电子表格视图中)并且您那里只列出了Main

    或者,您可以让其他 3 个 step-sub 采用虚拟可选参数以将它们从宏对话框中隐藏。

    【讨论】:

      【解决方案2】:

      @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
      

      【讨论】:

        猜你喜欢
        • 2017-12-02
        • 2018-04-19
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-20
        • 2020-05-01
        相关资源
        最近更新 更多