为什么我得到运行时错误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)
您显然必须将其插入代码中的正确位置。