我有一个Excel工作簿和几个工作表。
我希望宏查看每个工作表的单元格"A1“的值。
如果单元格值小于8,则必须将A1调整为8。
如果单元格值大于8,则无需调整。
我有两个宏:
Sub LoopCertain() 'Excel VBA to exclude sheets(1-3)
Dim sh As Worksheet
For Each sh In Sheets
Select Case sh.Name
Case Is = "Blad1", "Blad2", "Blad3"
'No Code here if excluded
Case Else
Call X2
End Select
Next sh
End Sub和
Sub X2()
'declare a variable
Dim ws As Worksheet
Set ws = ActiveSheet
'calculate if a cell is less than a specific value
If ws.Range("A1") < 8 Then
ws.Range("A1") = 8
Else
End If
End Sub问题是,只有活动工作表被完成,其余的工作表没有被查看。宏也不检查是否应包括工作表。
发布于 2022-04-11 08:50:46
如果你想用两艘潜艇,请试试下一条路。您的代码只使用第二个子部分中的活动表:
Sub LoopCertain() 'Excel VBA to exclude sheets(1-3)
Dim sh As Worksheet
For Each sh In Sheets
Select Case sh.name
Case "Blad1", "Blad2", "Blad3"
'No Code here if excluded
Case Else
Call X2(sh)
End Select
Next sh
End Sub
Sub X2(ws As Worksheet)
'calculate if a cell is less than a specific value
If ws.Range("A1").value < 8 Then ws.Range("A1") = 8
End Sub但是对于这样简单的处理,不需要第二个处理,因为第一个处理可以完成所有事情:
Sub LoopCertain() 'Excel VBA to exclude sheets(1-3)
Dim sh As Worksheet
For Each sh In Sheets
Select Case sh.name
Case "Blad1", "Blad2", "Blad3"
'No Code here if excluded
Case Else
If sh.Range("A1").value < 8 Then sh.Range("A1") = 8
End Select
Next sh
End Sub发布于 2022-04-11 08:55:30
使用当前形式的代码最干净的方法是将工作表对象传递给另一个子对象:
Sub LoopCertain() 'Excel VBA to exclude sheets(1-3)
Dim sh As Worksheet
For Each sh In Sheets
Select Case sh.Name
Case Is = "Blad1", "Blad2", "Blad3"
'No Code here if excluded
Case Else
Call X2(sh)
End Select
Next sh
End Sub然后
Sub X2(ByVal sh As Worksheet)
'calculate if a cell is less than a specific value
If sh.Range("A1") < 8 Then
sh.Range("A1") = 8
End If
End Sub我假设你在现实世界中有理由使用独立的子例程,但是一旦你理解了传递对象的概念,我建议你只在一个例程中这样做。
https://stackoverflow.com/questions/71824610
复制相似问题