将3个VBA宏合并为1个(2个删除不同图纸上的行,1个刷新数据)
我有3个宏,我想合并成一个顺序运行。我要运行的第一个位刷新excel工作簿中的所有数据,接下来的两个位删除工作表中的特定行。我拥有的三个宏单独工作,但我希望将这三个宏组合起来,以便最终用户可以同时运行它们。我认为我遇到的问题是,我错误地使这些宏在特定的工作表上运行,而不是在模块上运行。我一直坚持把它们结合起来,因为宏已经在不同的表中了 第一个宏:将3个VBA宏合并为1个(2个删除不同图纸上的行,1个刷新数据),vba,excel,Vba,Excel,我有3个宏,我想合并成一个顺序运行。我要运行的第一个位刷新excel工作簿中的所有数据,接下来的两个位删除工作表中的特定行。我拥有的三个宏单独工作,但我希望将这三个宏组合起来,以便最终用户可以同时运行它们。我认为我遇到的问题是,我错误地使这些宏在特定的工作表上运行,而不是在模块上运行。我一直坚持把它们结合起来,因为宏已经在不同的表中了 第一个宏: Sub Macro1() ActiveWorkbook.RefreshAll Sheets("ManagementDashboard").
Sub Macro1()
ActiveWorkbook.RefreshAll
Sheets("ManagementDashboard").Select
End Sub
第二个宏(在名为“RawDataPltzr”的工作表中运行)
子删除行()
Last=单元格(Rows.Count,“c”)。结束(xlUp)。行
对于i=最后一步-1
'如果单元格值小于100
如果(单元格(i,“c”)值小于100,则
'删除整行
单元格(i,“c”).EntireRow.Delete
如果结束
接下来我
端接头
第三个宏(在名为“RawDataLoader”的工作表中运行),也与第二个宏相同,只是必须在不同的工作表中运行)
子删除行()
Last=单元格(Rows.Count,“c”)。结束(xlUp)。行
对于i=最后一步-1
'如果单元格值小于100
如果(单元格(i,“c”)值小于100,则
'删除整行
单元格(i,“c”).EntireRow.Delete
如果结束
接下来我
端接头
最后,我希望选择工作表“ManagementDashboard”,就像在第一个宏中一样,但我需要先运行第二个和第三个宏,然后再运行它。任何帮助都将不胜感激 工作表模块中应仅包含与工作表事件相关的代码
单元格
,您就需要首先参考相应的工作表。例如,工作表(“RawDataLoader”).Cells()
确保您正确理解该方法。在这一点上,您可以将所有三个sub组合成一个sub(无需单独调用它们)
Sub RunAll()
ThisWorkbook.RefreshAll
将ws设置为工作表
对于此工作簿中的每个ws。工作表(数组(“RawDataPltzr”、“RawDataLoader”))
Last=ws.Cells(ws.Rows.Count,“c”).End(xlUp).Row
对于i=最后一步-1
'如果单元格值小于100
如果(ws.Cells(i,“c”)值小于100,则
'删除整行
ws.Cells(i,“c”).EntireRow.Delete
如果结束
接下来我
下一个ws
此工作簿。工作表(“管理仪表板”)。激活
端接头
工作表模块中应仅包含与工作表事件相关的代码
单元格
,您就需要首先参考相应的工作表。例如,工作表(“RawDataLoader”).Cells()
确保您正确理解该方法。在这一点上,您可以将所有三个sub组合成一个sub(无需单独调用它们)
Sub RunAll()
ThisWorkbook.RefreshAll
将ws设置为工作表
对于此工作簿中的每个ws。工作表(数组(“RawDataPltzr”、“RawDataLoader”))
Last=ws.Cells(ws.Rows.Count,“c”).End(xlUp).Row
对于i=最后一步-1
'如果单元格值小于100
如果(ws.Cells(i,“c”)值小于100,则
'删除整行
ws.Cells(i,“c”).EntireRow.Delete
如果结束
接下来我
下一个ws
此工作簿。工作表(“管理仪表板”)。激活
端接头
任何时候,只要您不引用某个位置,excel就会获取当时处于活动状态的内容并与之一起运行。例如,Cells(i,“C”).EntireRow.Delete
被解读为ActiveWorkbook.ActiveWorksheet.Cells(i,“C”).EntireRow.Delete
。通过使用Dim
我们不必选择或激活任何工作表或单元格。有关更多信息,请参阅。我把最后的.Activate
放在那里了,但使用起来很糟糕。将此代码放入它自己的模块中,它应该可以正常运行
Sub All_Three()
Dim wbk As Workbook
Dim MD As Worksheet, RDP As Worksheet, RDL As Worksheet, ws As Worksheet
Dim Last As Long, i As Long, myCount As Long
Set wbk = ActiveWorkbook
Set MD = wbk.Worksheets("ManagementDashboard")
Set RDP = wbk.Worksheets("RawDataPltzr")
Set RDL = wbk.Worksheets("RawDataLoader")
'Macro1
wbk.RefreshAll
For myCount = 1 To 2
Select Case myCount
Case 1
Set ws = RDP
Case 2
Set ws = RDL
End Select
'Macro 2 and 3
With ws
Last = .Range("C" & .Rows.Count).End(xlUp).Row
For i = Last To 1 Step -1
If .Cells(i, "C").Value < 100 Then
.Cells(i, "C").EntireRow.Delete
End If
Next i
End With
Next myCount
MD.Activate
End Sub
Sub All_Three()
将wbk设置为工作簿
Dim MD作为工作表,RDP作为工作表,RDL作为工作表,ws作为工作表
暗淡的持续时间一样长,我的持续时间一样长,我的持续时间一样长
设置wbk=ActiveWorkbook
设置MD=wbk.工作表(“管理仪表板”)
设置RDP=wbk.工作表(“RawDataPltzr”)
Set RDL=wbk.Worksheets(“RawDataLoader”)
“宏观1
wbk.RefreshAll
对于myCount=1到2
选择案例myCount
案例1
设置ws=RDP
案例2
设置ws=RDL
结束选择
'宏2和宏3
与ws
Last=.Range(“C”和.Rows.Count).End(xlUp).Row
对于i=最后一步-1
如果单元格(i,“C”)值小于100,则
.单元格(i,“C”).EntireRow.Delete
如果结束
接下来我
以
下一个我的帐户
MD.激活
端接头
任何时候,只要您不引用某个位置,excel就会获取当时处于活动状态的内容并与之一起运行。例如,Cells(i,“C”).EntireRow.Delete
被解读为ActiveWorkbook.ActiveWorksheet.Cells(i,“C”).EntireRow.Delete
。通过使用Dim
我们不必选择或激活任何工作表或单元格。有关更多信息,请参阅。我把最后的.Activate
放在那里了,但使用起来很糟糕。将此代码放入它自己的模块中,它应该可以正常运行
Sub All_Three()
Dim wbk As Workbook
Dim MD As Worksheet, RDP As Worksheet, RDL As Worksheet, ws As Worksheet
Dim Last As Long, i As Long, myCount As Long
Set wbk = ActiveWorkbook
Set MD = wbk.Worksheets("ManagementDashboard")
Set RDP = wbk.Worksheets("RawDataPltzr")
Set RDL = wbk.Worksheets("RawDataLoader")
'Macro1
wbk.RefreshAll
For myCount = 1 To 2
Select Case myCount
Case 1
Set ws = RDP
Case 2
Set ws = RDL
End Select
'Macro 2 and 3
With ws
Last = .Range("C" & .Rows.Count).End(xlUp).Row
For i = Last To 1 Step -1
If .Cells(i, "C").Value < 100 Then
.Cells(i, "C").EntireRow.Delete
End If
Next i
End With
Next myCount
MD.Activate
End Sub
Sub All_Three()
将wbk设置为工作簿
Dim MD作为工作表,RDP作为工作表,RDL作为工作表,ws作为工作表
暗淡的持续时间一样长,我的持续时间一样长,我的持续时间一样长
设置wbk=
Sub RunAll()
Macro1
DeleteRowsPltzr
DeleteRowsLoader
ThisWorkbook.Worksheets("ManagementDashboard").Activate
End Sub
Sub RunAll()
ThisWorkbook.RefreshAll
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets(Array("RawDataPltzr", "RawDataLoader"))
Last = ws.Cells(ws.Rows.Count, "c").End(xlUp).Row
For i = Last To 1 Step -1
'if cell value is less than 100
If (ws.Cells(i, "c").Value) < 100 Then
'delete entire row
ws.Cells(i, "c").EntireRow.Delete
End If
Next i
Next ws
ThisWorkbook.Worksheets("ManagementDashboard").Activate
End Sub
Sub All_Three()
Dim wbk As Workbook
Dim MD As Worksheet, RDP As Worksheet, RDL As Worksheet, ws As Worksheet
Dim Last As Long, i As Long, myCount As Long
Set wbk = ActiveWorkbook
Set MD = wbk.Worksheets("ManagementDashboard")
Set RDP = wbk.Worksheets("RawDataPltzr")
Set RDL = wbk.Worksheets("RawDataLoader")
'Macro1
wbk.RefreshAll
For myCount = 1 To 2
Select Case myCount
Case 1
Set ws = RDP
Case 2
Set ws = RDL
End Select
'Macro 2 and 3
With ws
Last = .Range("C" & .Rows.Count).End(xlUp).Row
For i = Last To 1 Step -1
If .Cells(i, "C").Value < 100 Then
.Cells(i, "C").EntireRow.Delete
End If
Next i
End With
Next myCount
MD.Activate
End Sub