我收到运行时错误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
)下剪切并粘贴该行。这会尝试按时间顺序保持机器。如果日期或班次不匹配,“内部”循环将转义,程序将移至下一行。
有人能看出为什么这会导致问题吗?或者为什么它适用于一组数据但不适用于第二组?
对不起,如果不清楚,我已尽力解释,但很难用文字描述。
谢谢,
克里斯
答案 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