为什么我得到运行时错误424对象是必需的?

我对VBA相当陌生。 我试图编写一个程序来运行大量的各种格式的零件号码,并将这些零件号分类,如下所示:

12A3-4 1B-4 2B-6 A12B 

然后让我的程序find这些types的所有格式,并返回并计算它们,如下所示:(注意数字现在用#表示)

  ##A# 1 #B 2 A##B 1 

但我得到一个运行时错误,我似乎无法源。

我的程序如下。 可能还有其他错误。

  Sub CheckPartNumbers() ' Select cell A2, where data begins Range("A2").Select ' Declare variable for cell location of our output Dim Cell As Range Set Cell = ActiveSheet.Range("C2") ' Set Do loop to stop when an empty cell is reached. Do Until IsEmpty(ActiveCell) ' Initialize vairable of type string to "" Dim partsFormat As String partsFormat = "" ' Run through each character of row For i = 1 To Len(ActiveCell.Value) Dim thisChar As String thisChar = Mid(ActiveCell.Value, i, 1) ' if thisChar is a letter If IsLetter(thisChar) Then partsFormat = partsFormat & thisChar ' if thischar is a number ElseIf IsNumeric(thisChar) Then partsFormat = partsFormat & "#" ' if dash ElseIf thisChar = "-" And (Len(ActiveCell.Value) - Len(Replace(ActiveCell.Value, "-", ""))) > 1 Then partsFormat = partsFormat & thisChar Else i = Len(ActiveCell.Value) End If Next i ' Check if partsFormat already exists in results with Match Dim myLocation As Range Set myLocation = Application.Match(partsFormat, Range("C2:D1")) ' If no, result will give error, so add partsFormat and make count 1 If IsError(myLocation) Then Range(Cell) = partsFormat Range(Cell).Offset(0, 1) = 1 Cell = Cell.Offset(1, 0) ' If yes, add 1 to appropriate cell Else myLocation.Offset(0, 1) = myLocation.Offset(0, 1).Value + 1 End If ' Run through next row ActiveCell.Offset(1, 0).Select Loop End Sub 

任何帮助表示赞赏!

编辑:我有很多错误,所以我的代码块更新:

 Dim myLocation As Variant myLocation = Application.Match(partsFormat, Range("C1").EntireColumn) ' If no, result will give error, so add partsFormat and make count 1 If IsError(myLocation) Then Cell = partsFormat Cell.Offset(0, 1) = 1 Cell = Cell.Offset(1, 0) ' If yes, add 1 to appropriate cell Else 'myLocation.Offset(0, 1) = myLocation.Offset(0, 1).Value + 1 End If 

424错误是由这两行引起的:

 Dim myLocation As Range Set myLocation = Application.Match(partsFormat, Range("C2:D1")) 

您已将myLocation声明为Range 。 然后你试图把它设置成一个数字,这是MATCH返回的数字,而不是一个范围。 所需的对象是一个范围。

编辑:

为了只计算列C中partsFormat的出现次数,使用如下所示:

 Dim partsFormat As String Dim partsFormatCount As Long partsFormat = "Part" partsFormatCount = Application.WorksheetFunction.CountIf(Range("C:C"), partsFormat) 

您显然必须将其插入代码中的正确位置。