[英]How to use the If statement to bypass a line of code
如果在過濾列時行為空,我如何繞過Selection.FormulaArray
代碼,我不希望它添加公式,只需跳到代碼中的下一部分。 我認為這是一個if
語句,但不知道如何編寫它。
ActiveSheet.ListObjects("Study_Setup").Range.AutoFilter Field:=31, Criteria1 _
:=RGB(255, 255, 204), Operator:=xlFilterCellColor
ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, 30).Select
Selection.FormulaArray = _
"=IFERROR(INDEX(RedaData!C[-29]:C[-9],MATCH(1,(RedaData!C[-26]=RC[-29])*
(RedaData!C[-29]=RC[-26]),0),5),"""")"
當您使用listobject
時,您應該利用這些好處:-)
例如,您可以使用列名而不是計算列。 要使用我的示例,您必須將“ColumnWithColor”替換為第 31 列的名稱,將“ColumnFormula”替換為第 30 列的名稱
Sub addFormula()
Dim lo As ListObject
Set lo = ActiveSheet.ListObjects("Study_Setup")
With lo
.Range.AutoFilter field:=.ListColumns("ColumnWithColor").Index, Criteria1:=RGB(255, 255, 204), Operator:=xlFilterCellColor
End With
Dim rg As Range
On Error Resume Next ' in case there are no visible cells
Set rg = lo.ListColumns("ColumnFormula").DataBodyRange.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not rg Is Nothing Then
rg.Formula = "=XXX" 'put your formula here
End If
lo.AutoFilter.ShowAllData
End Sub
如果您在一張具有不同過濾器的工作表上有多個列表對象,此解決方案也是安全的。
嘗試這個:
Dim rngS As Range
ActiveSheet.ListObjects("Study_Setup").Range.AutoFilter Field:=31, Criteria1:=RGB(255, 255, 204), Operator:=xlFilterCellColor
Set rngS = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
If Not (rngS.Areas.Count = 1 And rngS.Rows.Count = 1) Then
ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, 30).FormulaArray = "=IFERROR(INDEX(RedaData!C[-29]:C[-9],MATCH(1,(RedaData!C[-26]=RC[-29])* (RedaData!C[-29]=RC[-26]),0),5),"""")"
End If
Set rngS = Nothing
這會檢查是否只有標題可見,如果不可見,請編寫您的公式。
再見。
你是對的。 正如該問題的另一個答案中已經指出的那樣,您可以使用If not [Range] Is Nothing
限制公式的應用,我還建議顯式聲明對象和變量,因此如果對工作簿進行更改,代碼可以很容易在一個地方更新,有時關閉屏幕更新可以提高性能。 這是一個完全開發的示例:
Application.ScreenUpdating = False 'added to make the code run faster
'Explicitly defining everything saves time in the event of changes
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet
Dim lo As ListObject
Dim colorColumn As Integer
Dim formulaColumn As Integer
Set ws = wb.Sheets("RedaData")
Set lo = ws.ListObjects("Study_Setup")
colorColumn = 31
formulaColumn = 30
'Apply Filter
lo.Range.AutoFilter Field:=colorColumn, Criteria1 _
:=RGB(255, 255, 204), Operator:=xlFilterCellColor
Dim rg As Range
On Error Resume Next ' in case there are no visible cells
Set rg = lo.ListColumns(formulaColumn).DataBodyRange.SpecialCells(xlCellTypeVisible)
'Apply formula to visible cells
If Not rg Is Nothing Then
rg.Formula = "=IFERROR(INDEX(C[-29]:C[-9],MATCH(1,(C[-26]=RC[-29])*(C[-29]=RC[-26]),0),5),"""")"
End If
Application.ScreenUpdating = True 'Display results
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.