错误1004 - 此选择在Range.Insert上无效

时间:2013-05-10 08:49:51

标签: excel vba excel-vba

我收到运行时错误1004 - 当尝试在excel中运行VBA amcro时,此选择无效错误。

我已经四处寻找解决方案了,到目前为止我尝试过的所有解决方案都没有成功(激活工作表,清除数据下方的行以确保有插入空间和其他我无法记住的空间)。

我想做什么:

我们有一个需要根据三列进行排序的数据集,遗憾的是内置排序并不像我们希望的那样工作。三列是机器,班次和日期/时间。示例数据(按日​​期/时间排序):

Machine1  Days  02/05/2013 07:05
Machine2  Days  02/05/2013 07:05
Machine1  Days  02/05/2013 08:45
Machine1  Late  02/05/2013 15:05

我们希望对它进行排序,使它看起来像这样:

Machine1  Days  02/05/2013 07:05
Machine1  Days  02/05/2013 08:45
Machine2  Days  02/05/2013 07:05
Machine1  Late  02/05/2013 15:05

我的代码:

For rowCount = 4 To 5000
    On Error GoTo nextLoop
    Worksheets("Schedule").Activate
    If ActiveSheet.Cells(rowCount, 1).Value = "" Then
         Exit For
    End If
    If ActiveSheet.Cells(rowCount + 1, 1).Value = "" Then
         Exit For
    End If

    thisMachine = ActiveSheet.Cells(rowCount, 2).Value
    thisShift = ActiveSheet.Cells(rowCount, 4).Value
    thisDay = Mid(ActiveSheet.Cells(rowCount, 5).Value, 1, 10)

    pasteRow = rowCount + 1
    If ActiveSheet.Cells(rowCount + 2, 4).Value <> thisShift Then
        GoTo nextLoop
    End If

    For internalCount = rowCount + 1 To 5000
        If ActiveSheet.Cells(internalCount, 4).Value <> thisShift Then
            Exit For
        End If

        If Mid(ActiveSheet.Cells(internalCount, 5).Value, 1, 10) <> thisDay Then
             Exit For
        End If

        If ActiveSheet.Cells(internalCount, 2).Value = thisMachine Then
            Range(internalCount & ":" & internalCount).Cut
            Range(pasteRow & ":" & pasteRow).Insert
            pasteRow = pasteRow + 1
        End If
    Next internalCount
nextLoop:
Next rowCount

这适用于其中一个文件,但是同一格式的另一个文件产生错误,调试会突出显示行Range(pasteRow & ":" & pasteRow).Insert作为问题。

数据首先按日期/时间排序(未显示),这也按顺序排列。然后它循环遍历表的每一行,对于每一行,它检查它下面的每一行。如果下面的行包含相同的日期和班次并使用相同的机器,则会在正在读取的当前行或粘贴的前一行(pasteRow)下剪切并粘贴该行。这会尝试按时间顺序保持机器。如果日期或班次不匹配,“内部”循环将转义,程序将移至下一行。

有人能看出为什么这会导致问题吗?或者为什么它适用于一组数据但不适用于第二组?

对不起,如果不清楚,我已尽力解释,但很难用文字描述。

谢谢,

克里斯

1 个答案:

答案 0 :(得分:1)

我认为您需要按〜&gt;订购数据 Shift 〜&gt; 计算机〜&gt;的时间

如果是这种情况,那么您需要一个类似的vba代码来解决Excel 2003限制,有关详细信息,请参阅MrExcel

Range("A1:J1000").Sort Key1:=Range("B2"), Order1:=xlAscending, _
    Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
    xlTopToBottom, DataOption1:=xlSortNormal  
Range("A1:J1000").Sort Key1:=Range("F2"), Order1:=xlAscending, Key2:=Range _
    ("G2"), Order2:=xlAscending, Key3:=Range("A2"), Order3:=xlAscending, _
    Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
    xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, _
    DataOption3:=xlSortNormal