我有以下代码,它们从一个Excel工作表中复制单元格并将特殊值粘贴到文本文件中。
现在从要复制的工作表中,我有很多包含#N / A的单元格。
有人可以建议如何排除这些单元格吗?
谢谢
Private Sub CommandButton3_Click()
Dim i As Long
Dim wb As Workbook
Dim NewWB As Workbook
Dim saveFile As String
Dim WorkRng As Range
On Error Resume Next
i = Sheets(1).Range("W158:W" & Range("W158").End(xlDown).Row).Rows.Count
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wb = ActiveWorkbook
Set NewWB = Application.Workbooks.Add
Thispath = wb.path
wb.Sheets(2).Range("W158:W" & i + 5).Copy
NewWB.Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
NewWB.SaveAs filename:=Thispath & "\textfile.txt", FileFormat:=xlText,
CreateBackup:=False
NewWB.Close
Application.CutCopyMode = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:0)
我能想到的唯一方法是做一个基本的for循环,以遍历所有单元格并检查它们的值
For Each cell In activehseet.Range("W158:W" & i + 5)
With cell
If .Value = "#N\A" Then
Exit Sub
Else
.Copy
'code to paste here
End With
Next cell
不幸的是,这将花费相当长的时间才能运行,并且随着数据库的增大,它只会变得更长。我建议您丢失所有未在使用的行/列来加快速度。
但是,这可能是解决问题的最简单方法
有可能通过使用数组来实现,但是由于我不是数组操作的专家,所以我不确定。我敢肯定,比我聪明的人可以帮助您解决这一问题
希望这可以帮助您入门。好问题!
答案 1 :(得分:0)
您可以尝试将公式包装在IFERROR
中,只需选择要包装的所有单元格并运行以下宏即可:
Sub WrapFormulasWIthIFERROR()
Dim Cell As Range
For Each Cell In Selection
If Cell.HasFormula Then
If Left(Cell.Formula, 9) <> "=IFERROR(" Then
Cell.Formula = "=IFERROR(" & Mid(Cell.Formula, 2) & ","""")"
End If
End If
Next
End Sub
如果单元格值为N / A,则结果将为空单元格。请注意不要选择整个工作表,因为它将永远运行。