Excel VBA:带if条件的循环仅在第一个TRUE之前正常工作
我目前正在用VBA编写一个循环,由于某种原因,它只在第一个“If”语句为true之前工作。之后,它还将宏应用于假单元格。我只是找不到原因。在我的例子中,操作1-3。应仅对x=12和x=25执行,但代码对所有x>=12和x执行宏。这是一个关于为什么不应使用“ActiveSheet”的案例研究。问题是,您将新创建的工作表设置为“活动工作表”,因此它开始检查新创建的工作表,以查看是否有任何行被隐藏,而没有隐藏。指定变量: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
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
非常感谢您的快速响应和宝贵的时间!我找错地方了。。。现在宏正在按我所希望的那样工作:)非常感谢您的快速响应和宝贵的时间!我找错地方了。。。现在宏正按我所希望的那样工作:)