excel数据库function与vba结合使用,如果没有logging怎么办?

我正在使用excel的数据库function。 看例子图片

在这里输入图像描述

我使用vba来select具有“是”的logging,让我们说A

Selection.AutoFilter Field:=2, Criteria1:="yes" Range("B3").Select Range(Selection, Selection.End(xlDown)).Select 

然后我复制它粘贴到别的地方。 例如:

 Selection.Copy Range("B12").Select ActiveSheet.Paste 

问题是,当没有logging是,我得到错误1004.可能是因为没有什么可以粘贴。 如何编写一个脚本,以便如果没有粘贴,它会退出子?

我尝试了一些事情,但没有成功。

非常感谢您的帮助! 🙂

我喜欢这样做,因为你不需要错误检查它。 如果没有结果,它将简单地粘贴一个空白单元格:

 Sub tgr() With Range("B2").CurrentRegion .AutoFilter 2, "yes" Intersect(.Offset(1), Columns("B")).Copy Range("B12") .AutoFilter End With End Sub 

或者,如果您只有一个标准,则可以使用Countif在执行filter之前testing标准是否存在:

 Sub tgr() Dim strCriteria As String strCriteria = "yes" With Range("B2").CurrentRegion If WorksheetFunction.CountIf(Intersect(.Cells, Columns("C")), strCriteria) > 0 Then .AutoFilter 2, strCriteria Intersect(.Offset(1), Columns("B")).Copy Range("B12") .AutoFilter Else MsgBox "No cells found to contain """ & strCriteria & """", , "No Matches" End If End With End Sub 

这将在应用AutoFilter后检查可见单元的数量:

 Selection.AutoFilter Field:=2, Criteria1:="yes" If ActiveSheet.AutoFilter.Range.Rows.Offset(1, 0).SpecialCells(xlCellTypeVisible).Count - ActiveSheet.AutoFilter.Range.Columns.Count > 0 Then Range("B3").Select Range(Range("b3"), Range("b2").End(xlDown)).Select Selection.Copy Range("B12").Select ActiveSheet.Paste End If 

- ActiveSheet.AutoFilter.Range.Columns.Count部分是从计数中减去标题单元格。

FWIW,当我走过你的原始代码时,我得到了1004,因为复制区域是从B7到表单的底部(xlDown在空select中的效果)。

您可以使用SUBTOTAL工作表函数来计数可见的行,只有在有可见的行时才进行复制和粘贴。 这是一个例子。

 Sub CopyFiltered() Dim rToFilter As Range Dim rToCopy As Range Dim rToPaste As Range Set rToFilter = Selection Set rToPaste = rToFilter.Cells(1).Offset(10, 0) 'paste it 10 rows down rToFilter.AutoFilter 2, "yes" 'Use subototal to count the visible rows in column 1 If Application.WorksheetFunction.Subtotal(2, rToFilter.Columns(1)) > 0 Then 'Copy excluding the header row Set rToCopy = rToFilter.Columns(1).Offset(1, 0).Resize(rToFilter.Rows.Count - 1) rToCopy.Copy Destination:=rToPaste End If End Sub