【问题标题】:VBA: Loop with if condition only works correctly until the first TRUEVBA:使用 if 条件循环只能正常工作,直到第一个 TRUE
【发布时间】:2016-11-14 00:50:27
【问题描述】:

我目前正在用 VBA 编写一个循环,由于某种原因,它只能在第一个“If”语句为真之前工作。之后,它还将宏应用于错误的单元格。我只是找不到原因。在我的示例中,操作 1.-3。应该只对 x = 12 和 x = 25 执行但代码对所有 x >= 12 和 x 执行宏

我已经尝试了三个小时来修复此代码并在 Internet 上的某个地方找到答案... :-( 如果您能提供帮助将非常高兴!提前非常感谢!

Sub CreateReport()

Dim lastrow As Long
Dim x As Long

lastrow = Sheets("Overview").Cells(Rows.Count, 1).End(xlUp).Row

For x = 10 To lastrow

    If ActiveSheet.Range("A" & x).EntireRow.Hidden = False Then

        '1. Copy sheet once per visible row

        Sheets("Master").Select
        Sheets("Master").Copy After:=Sheets(Sheets.Count)

        '2. Paste company name

        ActiveSheet.Cells(4, 1).Value = Sheets("Overview").Cells(x, 1).Value

        '3. Name worksheet after company name

        ActiveSheet.Name = Cells(4, 1).Value

    End If


Next x


End Sub

【问题讨论】:

    标签: excel vba loops if-statement


    【解决方案1】:

    这是一个关于为什么不应使用“ActiveSheet”的案例研究。问题是您将新创建的工作表设置为“ActiveSheet”,因此它开始检查新创建的工作表以查看是否隐藏了任何行,而它们不是。指定变量:

    Sub CreateReport()
    
    Dim wb As Workbook
    Dim overviewSheet As WorkSheet
    Dim newSheet As Worksheet
    Dim masterSheet As Worksheet
    Dim lastrow As Long
    Dim x As Long
    
    Set wb = ThisWorkbook
    Set overviewSheet = wb.Sheets("Overview")
    Set masterSheet = wb.Sheets("Master")
    lastrow = overviewSheet.Cells(overviewSheet.Rows.Count, 1).End(xlUp).Row
    
    For x = 10 To lastrow
    
        If overviewSheet.Range("A" & x).EntireRow.Hidden = False Then
    
            '1. Copy sheet once per visible row
    
    
            masterSheet.Copy After:=wb.Sheets(wb.Sheets.Count)
    
            Set newSheet = wb.Sheets(wb.Sheets.Count)
    
            '2. Paste company name
    
            newSheet.Cells(4, 1).Value = overViewSheet.Cells(x, 1).Value
    
            '3. Name worksheet after company name
    
            newSheet.Name = Cells(4, 1).Value
    
        End If
    
    
    Next x
    
    
    End Sub
    

    【讨论】:

    • 非常感谢您的快速响应和您的宝贵时间!我一直在寻找所有错误的地方......现在宏的工作就像我想要的那样:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 2019-10-17
    • 2013-05-30
    • 2013-08-09
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多