【问题标题】:For each loop need guidance对于每个循环都需要指导
【发布时间】:2015-01-16 02:53:16
【问题描述】:

这个想法是我想根据 vba 中的给定标准评估 Workbook 中的每个 Ws。如果满足标准,我希望它做点什么。如果没有满足我想去下一个ws。我知道这很简单。任何帮助将不胜感激

这是我目前所拥有的。

Sub dataconsol()
    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Worksheets
        If ActiveSheet.Range("B9").Value = 1 Then
            Range("A1").Value = 2
        ElseIf Range("b9").Value <> 1 Then

        End If
    Next Ws
End Sub

【问题讨论】:

    标签: excel if-statement for-loop vba


    【解决方案1】:

    您的代码很好。将 ActiveSheet 切换为 With Ws,因为在您的情况下 ActiveSheet 始终为“Sheet1”。

    Sub dataconsol()
    
    Dim Ws As Worksheet
    
    For Each Ws In ThisWorkbook.Worksheets
        With Ws
            If .Range("B9").Value = 1 Then
                .Range("A1").Value = 2
            ElseIf .Range("b9").Value <> 1 Then
            End If
        End With
    Next Ws
    
    End Sub
    

    或者如果你想使用 ActiveSheet:

    Sub dataconsol2()
    
    Dim Ws As Worksheet
    
    For Each Ws In ThisWorkbook.Worksheets
        Ws.Activate
        If Range("B9").Value = 1 Then
            Range("A1").Value = 2
        ElseIf Range("b9").Value <> 1 Then
        End If
    Next Ws
    
    End Sub
    

    【讨论】:

    • 谢谢。完美运行。你能解释一下“With Ws”是什么意思以及为什么它是必要的吗?基本问题,但我仍在整理基础知识(没有打算)。
    • With...End With 声明的解释:msdn.microsoft.com/en-us/library/wc500chb.aspx,长话短说,每次都用Ws.Range代替。您正在使用 ActiveSheet 而不激活每张工作表(因此它一直在引用 Sheet1)。
    • 如果您需要使用 ActiveSheet,我还使用 Sheet.Activate 放置了另一个版本(在这种情况下为Ws.Activate
    • Rafal,你能解释一下.range和range的区别吗?有趣的是,.range 方法对我来说很复杂,而第二种方法几乎立即成功。只是好奇为什么会这样。
    • 这是一回事。 Lone Range 是指当前处于活动状态的工作表。看看我在答案中输入的第二个代码,我正在激活我循环进入的每个工作表,我可以通过Range 引用它。另一方面,.Range 指的是我正在循环进入的工作表,因为With...End With 它用作Ws.Range,它直接指向我感兴趣的工作表。您也可以使用Sheet("SheetName")Sheet(x) 其中x 是纸张索引(即 1)。我希望它能澄清一点。
    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多