Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
抓住这句话;“数据范围太复杂”;VBA中的错误_Vba_Excel_Excel 2007 - Fatal编程技术网

抓住这句话;“数据范围太复杂”;VBA中的错误

抓住这句话;“数据范围太复杂”;VBA中的错误,vba,excel,excel-2007,Vba,Excel,Excel 2007,在我正在处理的excel宏中,我将过滤后的数据复制到新的工作表中,以删除隐藏的行。这允许我对用户筛选的数据运行更复杂的公式。对于经过复杂过滤的大型数据集,复制操作不再只接收过滤后的数据,而是复制所有数据 手动复制过程时,Excel在我尝试复制筛选数据时给了我“数据范围太复杂”错误。这很容易通过排序和过滤来克服,但是我不知道如何在VBA中捕捉这个错误。我想知道复制操作是否正常工作(并允许宏继续),或者选择是否太复杂(停止宏并提醒用户先尝试排序) 你知道我该怎么做吗?任何帮助都将不胜感激 相关代码如

在我正在处理的excel宏中,我将过滤后的数据复制到新的工作表中,以删除隐藏的行。这允许我对用户筛选的数据运行更复杂的公式。对于经过复杂过滤的大型数据集,复制操作不再只接收过滤后的数据,而是复制所有数据

手动复制过程时,Excel在我尝试复制筛选数据时给了我“数据范围太复杂”错误。这很容易通过排序和过滤来克服,但是我不知道如何在VBA中捕捉这个错误。我想知道复制操作是否正常工作(并允许宏继续),或者选择是否太复杂(停止宏并提醒用户先尝试排序)

你知道我该怎么做吗?任何帮助都将不胜感激

相关代码如下:

    Select Case Range("GDT_Filtered").Value
    Case "Filtered Data"
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        Set wRaw = ActiveSheet
        Sheets("Raw Data").Select
        lastRow = Range("A1").End(xlDown).Row
        Range("A1:S" & lastRow).Copy Destination:=wRaw.Range("A1")

    Case "All Data"
        Set wRaw = Sheets("Raw Data")
        On Error Resume Next
        wRaw.ShowAllData
        On Error GoTo 0
    End Select
谢谢

Sam使用一个错误

sub 

   On Error Goto 1

   do the copy, if it fails, code will jump to 1.

   On Error Goto 0 'zero means you are not doing any treatment for further errors

   continue the code

   exit sub 'you don't want the code to do error treatment below if there's no error

   1 Do what you need if error occurs

end sub

我找到了一个可行的解决办法

假设原始数据存储在工作表wOne中,并且过滤后的数据复制到工作表wTwo,则以下代码将通过检查过滤和每张工作表中的行数来查找错误:

' Excel can't copy too many discontinuous sections. If it happens it won't throw
' an error but will copy ALL data instead of just filtered data. This checks that
' such an error has not occurred.
If wOne.AutoFilter.FilterMode = True Then
    If wOne.range("A1").End(xlDown).Row = wTwo.Range("A1").End(xlDown).Row Then
        MsgBox "Filtering has produced too many discontinuous selections. " & _ 
                "Try removing the filters, sorting data by the variables " & _ 
                "you wish to filter with, reapplying the filters, and " & _
                "trying again. Good luck!"
        GoTo 1
    End If
End If

这是一个相当常见的错误,但如果您向我们显示发生异常的部分代码,则更容易回答。@KazJaw造成问题的代码是:
Range(“A1:S”和LastRow)。复制目标:=wRaw.Range(“A1”)
。它复制的范围已过滤。同样,它不会引发异常,这就是问题所在。我想我知道该建议什么,但请在您的问题中添加更多的代码,向我们展示
LastRow
定义和
wRaw
。我会尽力回答…@KazJaw谢谢!代码部分已添加到问题中-如果您需要查看其他内容,请告诉我。感谢您的快速回复!不幸的是,此操作根本不会引发错误-当手动执行此操作时,excel将弹出一个警报,说明“Microsoft Office excel无法创建或使用数据范围引用,因为它太复杂”,但随后将继续复制所有数据,而不仅仅是过滤后的数据。在VBA中,它不会注册为错误,也不会弹出警报,它只是继续完整复制。