我试图循环遍历所有工作表并逐一检查它们并执行以下操作:如果在选中的单元格中,E18 = N / A的值则在第一张工作表上(命名为摘要)我改变了G23的值也是N / A(然后对每个单元格进行处理,然后在汇总更改G23然后是G24然后是G25等等)我编写了以下循环,它运行但它不会做任何事情
Sub MyTestSub()
Dim ws As Worksheet
LastRow = Cells(Rows.Count, "G").End(xlUp).Row
For X = 22 To LastRow
For Each ws In Worksheets
If ws.Range("E18").Value="N/A" then ThisWorkbook.Sheets("Summary").Range("G"&x).Value="N/A"
Next ws
Next x
End Sub
任何帮助将不胜感激!
答案 0 :(得分:2)
它需要一个两步程序:
IsError
。#N/A
检查错误类型是否为If .Range("E18").Value = CVErr(xlErrNA) Then
。否则,如果您有常规的String
,例如" Pass"你会收到一个错误。
<强>代码强>
Dim lRow As Long
LastRow = Sheets("Summary").Cells(Sheets("Summary").Rows.Count, "G").End(xlUp).Row
lRow = 23 ' start from row 23
For Each ws In Worksheets
With ws
If .Name <> "Summary" Then
If IsError(.Range("E18").Value) Then
If .Range("E18").Value = CVErr(xlErrNA) Then
Sheets("Summary").Range("G" & lRow).Value = CVErr(xlErrNA)
End If
End If
End If
End With
lRow = lRow + 1
Next ws
答案 1 :(得分:0)
尝试反转嵌套循环。这样的事情应该有效:
Sub MyTestSub()
Dim ws As Worksheet
For Each ws In Worksheets
LastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row
If IsError(ws.Range("E18")) then
For X = 22 To LastRow
Sheets("Summary").Range("G" & LastRow) = ws.Range("E18")
next x
end if
Next ws
End Sub
此外,我假设每个工作表LastRow
不同,因此每次有新工作表时都必须经常重置它。
最后但并非最不重要的 - 当您引用Cells
时,请确保引用工作表,如下所示:
LastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row
如果您不这样做,您将考虑ActiveSheet
。
以下是有关Excel中的错误并返回错误的更多信息 - http://www.cpearson.com/excel/ReturningErrors.aspx
该解决方案适用于任何错误,不仅适用于 #N / A