运行时错误6 – 溢出,variables设置为长

我遇到问题执行过滤数据的复制粘贴。 如果过滤字段的结果为0或大于1,则我的代码不会遇到错误。但是,如果filter后有1个可见logging,则会显示运行时错误6。 请参阅下面的代码:

Dim wsDue As Worksheet Dim wsTarget As Worksheet Dim y As Long Dim x As Long x = Range("A65536").End(xlUp).Row Range("A1").AutoFilter Field:=2, Criteria1:=Array("Yes"), Operator:=xlFilterValues Set wsDue = Worksheets("Due") Set wsTarget = Worksheets("Target List Consolidated") y = wsDue.Range("B" & wsDue.Rows.Count).End(xlUp).Row If wsDue.Range(wsDue.Cells(2, 2), wsDue.Cells(y, 2)).SpecialCells(xlCellTypeVisible).Count > 1 Then wsDue.Range("B2:B" & x).Copy wsTarget.Range("A65536").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False Else: End If 

首先,确保您的Excel(又名MS-Office)具有所有适用的服务包。 单个被过滤的行被解释为所有行的问题是一个已知的错误,但在后续的服务包中被纠正。

您也可以应用一些“最佳实践”代码来避免它发生。 Range.CurrentRegion属性可用于本地化Range.AutoFilter方法 。 使用渐进式With … End With语句来进一步隔离要传输的数据。

 Dim wsDue As Worksheet, wsTarget As Worksheet With Worksheets("Due") If .AutoFilterMode Then .AutoFilterMode = False 'work on the contiguous block of cells radiating out from A1 With .Cells(1, 1).CurrentRegion 'apply the AutoFilter .AutoFilter Field:=2, Criteria1:=Array("Yes"), Operator:=xlFilterValues 'shift one row down (off the header row) and resize one less row 'isolate column B With .Offset(1, 1).Resize(.Rows.Count - 1, 1) 'non-destructive test to see if there are any rows visible If CBool(Application.Subtotal(103, .Cells)) Then Set wsTarget = Worksheets("Target List Consolidated") .Copy wsTarget.Range("A65536").End(xlUp).Offset(1).PasteSpecial _ Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False End If End With End With End With 

我想出了另一种解决方法。 我使用了下面的代码:

 Dim x As Long Dim wsDue As Worksheet Dim wsTarget As Worksheet x = Range("A65536").End(xlUp).Row Range("A1").AutoFilter Field:=2, Criteria1:=Array("Yes"), Operator:=xlFilterValues Set wsDue = Worksheets("Due") Set wsTarget = Worksheets("Target List Consolidated") If wsDue.Range("B1:B" & x).Offset(1, 0).SpecialCells(xlCellTypeVisible).Count > 1 Then wsDue.Range("B1:B" & x).Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy wsTarget.Range("A65536").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False Application.CutCopyMode = False Application.DisplayAlerts = False Else: End If 

该解决scheme能够得到filter的结果,并将复制所需的范围,不包括行1中的标题。