在excel中使用VBA对所有图纸(命名图纸除外)运行特定宏
我有一个调用其他宏在指定工作表上运行的代码 首先:我想知道如何告诉它在之前未列出的所有剩余工作表上运行另一个宏 第二:我希望上述宏在剩余的工作表上运行,不包括一些命名的工作表(例如“图形”) 这是到目前为止我的代码在excel中使用VBA对所有图纸(命名图纸除外)运行特定宏,excel,vba,Excel,Vba,我有一个调用其他宏在指定工作表上运行的代码 首先:我想知道如何告诉它在之前未列出的所有剩余工作表上运行另一个宏 第二:我希望上述宏在剩余的工作表上运行,不包括一些命名的工作表(例如“图形”) 这是到目前为止我的代码 Sub specify_sheets() 'apply appropriate limits to relative sheet Dim sht As Worksheet For Each sht In Worksheets If sht.Name = Workshee
Sub specify_sheets()
'apply appropriate limits to relative sheet
Dim sht As Worksheet
For Each sht In Worksheets
If sht.Name = Worksheets("NB12") Or _
sht.Name = Worksheets("NB15") Then
Call limits_Alluvium
End If
If sht.Name = Worksheets("NB24") Then
Call limits_BOCOBOML_GFA
End If
If sht.Name = Worksheets("NB16") Or _
sht.Name = Worksheets("NB17") Or _
sht.Name = Worksheets("NB19") Or _
sht.Name = Worksheets("NB20") Or _
sht.Name = Worksheets("Bore 31") Then
Call limits_BOCOBOML_MIA
End If
If sht.Name = Worksheets("Bore 47") Or _
sht.Name = Worksheets("Bore 48") Then
Call limits_FracturedRock_GFA
End If
If sht.Name = Worksheets("Bore 4") Or _
sht.Name = Worksheets("Bore 4a") Or _
sht.Name = Worksheets("Bore 40") Then
Call limits_FracturedRock_MIA_West
End If
If sht.Name = Worksheets("Bore 30") Then
Call limits_FracturedRock_MIA_East
End If
Next sht
End Sub
下面是它调用的一个宏的代码:
Sub limits_Monitoring_bores()
Dim sht As Worksheet, lastRow As Long
Set sht = ActiveWorkbook.Worksheet
'Name columns appropriately
With ActiveWorkbook.Worksheets(1)
.Cells(1, 4).Value = "Min"
.Cells(1, 5).Value = "Max"
.Cells(1, 7).Value = "20th Percentile"
.Cells(1, 8).Value = "80th Percentile"
.Cells(1, 10).Value = "20th Percentile"
.Cells(1, 11).Value = "80th Percentile"
End With
lastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
sh.Range("D2:D" & lastRow).Value = "=6"
sh.Range("E2:E" & lastRow).Value = "=8.5"
sh.Range("G2:G" & lastRow).Value = "=PERCENTILE(F:F,0.2)"
sh.Range("H2:H" & lastRow).Value = "=PERCENTILE(F:F,0.8)"
sh.Range("J2:J" & lastRow).Value = "=PERCENTILE(I:I,0.2)"
sh.Range("K2:K" & lastRow).Value = "=PERCENTILE(I:I,0.8)"
End Sub
这应该适合您:-
Sub STO()
Dim Fun As String
Dim Sht As Worksheet
For Each Sht In Worksheets
Select Case Sht.Name
Case "NB12", "NB15"
limits_Alluvium
Case "NB24"
limits_BOCOBOML_GFA
Case "NB16", "NB17", "NB19", "NB20", "Bore 31"
limits_BOCOBOML_MIA
Case "Bore 47", "Bore 48"
limits_FracturedRock_GFA
Case "Bore 4", "Bore 4a", "Bore 40"
limits_FracturedRock_MIA_West
Case "Bore 30"
limits_FracturedRock_MIA_East
Case Else
If Len(Fun) Then Fun = Fun & vbCr
Fun = Fun & Sht.Name
End Select
Next Sht
MsgBox Fun, vbInformation, "Sheets not processed"
End Sub
任何地方未列出的图纸都不会被处理。我有这个
如果sht.Name“EA Graphs”和sht.Name“Graphs”,那么调用limits\u Monitoring\u bores End如果
,但我不希望它在我的原始问题中已经列出的孔上运行。有没有一个更简单的方法,或者我只是用这个代码来列出它们?你所谓的代码(例如“limits_Alluvium”)是如何知道它应该在哪张纸上操作的?比我的答案更好。添加一个Case-Else
以处理未在特定案例中列出的任何其他工作表。感谢Case-Else
如果有我不想运行的工作表,我是否只运行一个案例,每个案例都列出并执行某项操作?您好,这似乎只在第一个工作表上运行,但其他工作表都没有。我已经从其中一个宏中添加了一些代码叫它。我认为它可能需要调整?我的代码-事实上,你的代码-在所有的工作表中循环。所有的,不仅仅是一个。它看每个名字。如果名称列在任何“案例”中,它将运行该特定宏。我不认为“Case-Else”是一种改进,但您可以将其用于测试。我已经修改了我的代码以包含这样的测试。它将发布一个MsgBox,其中包含未列出的所有工作表的列表。在工作表名称中查找空格。完成工作后,删除多余的代码。