Excel VBA:带if条件的循环仅在第一个TRUE之前正常工作

Excel VBA:带if条件的循环仅在第一个TRUE之前正常工作,excel,vba,loops,if-statement,Excel,Vba,Loops,If Statement,我目前正在用VBA编写一个循环,由于某种原因,它只在第一个“If”语句为true之前工作。之后,它还将宏应用于假单元格。我只是找不到原因。在我的例子中,操作1-3。应仅对x=12和x=25执行,但代码对所有x>=12和x执行宏。这是一个关于为什么不应使用“ActiveSheet”的案例研究。问题是,您将新创建的工作表设置为“活动工作表”,因此它开始检查新创建的工作表,以查看是否有任何行被隐藏,而没有隐藏。指定变量: Sub CreateReport() Dim wb As Workbook D

我目前正在用VBA编写一个循环,由于某种原因,它只在第一个“If”语句为true之前工作。之后,它还将宏应用于假单元格。我只是找不到原因。在我的例子中,操作1-3。应仅对x=12和x=25执行,但代码对所有x>=12和x执行宏。这是一个关于为什么不应使用“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

这是一个关于为什么不应该使用“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

非常感谢您的快速响应和宝贵的时间!我找错地方了。。。现在宏正在按我所希望的那样工作:)非常感谢您的快速响应和宝贵的时间!我找错地方了。。。现在宏正按我所希望的那样工作:)