遍历工作表,排除一些并查找单元格值
Loop through worksheets, exclude some and look-up cellvalue
我是 excel vba 的初学者,需要您的帮助!
我的宏遇到了以下问题:
我有一个包含多个工作表的 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
我现在 运行 遇到的问题是只完成了活动工作表,而没有查看其余工作表。该宏也不检查是否不应包含工作表。
有人可以帮助我吗?
提前致谢!
如果您想使用两个潜艇,请尝试下一种方式。您的代码仅在第二个子中使用活动 sheet:
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
使用当前形式的代码执行此操作的最简洁方法是将 sheet 对象传递给另一个子对象:
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
我假设你在 real-world 中使用单独的 sub-routines 是有原因的,但是一旦你理解了传递对象的概念,那么我建议你在一个单个例程。
我是 excel vba 的初学者,需要您的帮助!
我的宏遇到了以下问题:
我有一个包含多个工作表的 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
我现在 运行 遇到的问题是只完成了活动工作表,而没有查看其余工作表。该宏也不检查是否不应包含工作表。
有人可以帮助我吗?
提前致谢!
如果您想使用两个潜艇,请尝试下一种方式。您的代码仅在第二个子中使用活动 sheet:
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
使用当前形式的代码执行此操作的最简洁方法是将 sheet 对象传递给另一个子对象:
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
我假设你在 real-world 中使用单独的 sub-routines 是有原因的,但是一旦你理解了传递对象的概念,那么我建议你在一个单个例程。